sql转换视图表上的错误

时间:2013-06-03 11:58:00

标签: sql sql-server-2005

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命令,表是视图表... 每次我把“转换(浮动...)部分”我得到 Msg 8114,Level 16,State 5,Line 1 将数据类型nvarchar转换为float时出错。

这个错误......

2 个答案:

答案 0 :(得分:0)

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

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

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

SELECT * FROM vwSimProjAgentTrace WHERE NOT ISNUMERIC(traceValue)

您可以找到documentation of ISNUMERIC here

答案 1 :(得分:0)

如果您在convert command查看BoL(在线图书),您会看到nvarchar转换为float是一种隐式转换。这意味着只有" float" -able值可以转换为float。因此,可以转换每个数值(在浮点范围内)。无法转换非数字值,这非常符合逻辑。

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

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