将数据类型nvarchar转换为float的SQL错误

时间:2018-05-07 14:14:45

标签: sql sql-server sql-server-2008

我收到错误

  

将数据类型nvarchar转换为float

时出错

在我的存储过程的这一部分:

 SELECT 
     CAST(RTRIM(Value) AS FLOAT)     
 FROM 
     table_1
 WHERE 
     ISNUMERIC(RTRIM(Value)) = 1 
     AND RTRIM(Value) NOT LIKE '%[^0-9.]%'

我试图追踪导致这种情况的价值,但是无法这样做,现在程序成功运行,因此我无法追踪有问题的价值格式。

如果有人可以建议一种方式,我想知道我们所拥有的两项检查可以通过哪种价值。

2 个答案:

答案 0 :(得分:0)

如果你有SQL Server 2012或更新版本,你可以使用TRY_CONVERT代替ISNUMERIC

SELECT TRY_CONVERT(FLOAT, RTRIM(Value))
FROM table_1
WHERE RTRIM(Value) NOT LIKE '%[^0-9.]%'

在您的情况下,您应该为WHERE条款添加其他条件(我能够提出两个):

SELECT 
     CAST(RTRIM(Value) AS FLOAT)     
 FROM 
     table_1
 WHERE 
     ISNUMERIC(RTRIM(Value)) = 1 
     AND RTRIM(Value) NOT LIKE '%[^0-9.]%'
     AND RTRIM(Value) != '.'
     AND RTRIM(Value) NOT LIKE '%.%.%'

答案 1 :(得分:0)

使用TRY_CONVERT()代替

SELECT CONVERT(DECIMAL(10, 0), RTRIM(Value)) as Col
FROM table_1
WHERE TRY_CONVERT((DECIMAL(10, 0), Value) IS NOT NULL;
--WHERE ISNUMERIC(RTRIM(Value)) = 1 AND RTRIM(Value) NOT LIKE '%[^0-9.]%'