0
SELECT logicalTime, traceValue, unitType, entName 
FROM vwSimProjAgentTrace 
WHERE valueType = 10  
AND agentName ='AtisMesafesi' 
AND ( entName = 'Hawk-1') 
AND simName IN ('TipSenaryo1_0') 
AND logicalTime IN (
    SELECT logicalTime 
    FROM vwSimProjAgentTrace 
    WHERE valueType = 10  AND agentName ='AtisIrtifasi' 
    AND ( entName = 'Hawk-1') 
    AND simName IN ('TipSenaryo1_0')  
    AND CONVERT(FLOAT , traceValue) > 123
) ORDER BY simName, logicalTime 

这是我的 sql 命令,表是一个视图表......每次我输入“convert(float...) part”时,我都会得到 Msg 8114, Level 16, State 5, Line 1 将数据类型 nvarchar 转换为浮点数时出错。

这个错误...

4

2 回答 2

0

一行(或多行)的traceValue字段中包含无法转换为浮点数的数据。

确保您使用了正确的点和逗号组合来表示浮点值,并确保该字段中没有纯无效数据(例如文本)。

您可以尝试使用此 SQL 来查找无效行,但可能存在无法处理的情况:

SELECT * FROM vwSimProjAgentTrace WHERE NOT ISNUMERIC(traceValue)

您可以在此处找到 ISNUMERIC 的文档

于 2013-06-03T12:11:39.230 回答
0

如果您在转换命令中查看 BoL(在线书籍) ,您会看到将 nvarchar 转换为 float 是一种隐式转换。这意味着只有“浮点”值可以转换为浮点数。因此,可以转换每个数值(即在浮点范围内)。一个非数字的值是不能转换的,这是很合乎逻辑的。

可能您的列中有一些非数值。当您在没有转换的情况下运行查询时,您可能会看到它们。寻找像逗号和点这样的东西。在测试场景中,逗号而不是点给了我一些问题。

有关 isumeric 的示例,请查看此sqlfiddle

于 2013-06-03T12:13:12.983 回答