使用MSSQL将varchar转换为numeric时出错

时间:2011-04-25 16:18:25

标签: sql-server

查询

SELECT TOP 1000
CASE WHEN VRI.Square_Footage <> '' 
THEN VRI.Square_Footage 
ELSE 
    CASE WHEN VRI.Property_Type = 'LAND' 
        THEN CAST((CONVERT(NUMERIC(38, 3),VRI.Acres)*43560) AS DECIMAL) 
    ELSE 
        VRI.Lot_Size 
    END 
END
FROM View_Report_Information_Tables AS VRI

即使我使用VRI.Acres检查isnumeric(),它仍会产生相同的确切错误?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

ISNUMERIC并不保证会成功投放到decimal

SELECT ISNUMERIC('£100') /*Returns 1*/

SELECT CONVERT(NUMERIC(38, 3),'£100') /*Error*/

此外,case语句的所有分支都需要返回兼容的数据类型。看起来VRI.Square_Footage是一个字符串。

这对你有用吗?

SELECT TOP 1000 CASE
                  WHEN ISNUMERIC(VRI.Square_Footage + 'e0') = 1 THEN
                  VRI.Square_Footage
                  WHEN VRI.Property_Type = 'LAND'
                       AND ISNUMERIC(VRI.Acres + 'e0') = 1 THEN CAST((
                  CONVERT(NUMERIC(38, 3), VRI.Acres) * 43560 ) AS DECIMAL)
                  WHEN ISNUMERIC(VRI.Lot_Size + 'e0') = 1 THEN VRI.Lot_Size
                END
FROM   View_Report_Information_Tables AS VRI  

答案 1 :(得分:2)

这里运行

 SELECT ISNUMERIC('d25')

可以转换为float但不能转换为decimal / numeric

SELECT CONVERT(FLOAT,'2d5')

如您所见,您不能依赖数字表示十进制/数字数据类型

查看IsNumeric, IsInt, IsNumber代码,了解如何查看