查询
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()
,它仍会产生相同的确切错误?我该如何解决这个问题?
答案 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代码,了解如何查看