为什么在转换为十进制时会收到涉及数据类型INT的错误消息?
SELECT
a.number, --nvarchar
b.number --nvarchar
FROM
TableA AS a
TableB AS b
WHERE
CAST(COALESCE(a.number, 0), AS DECIMAL(10,2)) <> CAST(COALESCE(b.number, 0), AS DECIMAL(10,2))
错误:
Msg 245,Level 16,State 1,Line 156 转换nvarchar值时转换失败&#39; 78000.0&#39;到数据类型 中间体
答案 0 :(得分:1)
这是因为coalesce
期望a.number
nvarchar
与0
int
兼容。这就是转换失败的地方,因为nvarchar
和int
不兼容。
用0
替换'0'
可以解决问题:
CAST(COALESCE(a.number, `0`), AS DECIMAL(10,2))
注意:除非这是您无法控制的旧数据库,否则您应该考虑将number
字段的类型更改为数字,例如, decimal(10,2)
。
答案 1 :(得分:1)
看起来是因为你在数字字段(nvarchar)和数字上做Coalese,你的0.将你的演员移动到Coalese内部(或者也可以施放nvarchar的列。
这样做会给我一个转换错误,因为你无法将字符串和数字联系起来
SELECT COALESCE('A', 0) -- errors out, and this is basically what your doing
SELECT
a.number, --nvarchar
b.number --nvarchar
FROM
TableA AS a
TableB AS b
WHERE
COALESCE(CAST(a.number AS DECIMAL(10,2)), 0) <> COALESCE(CAST(b.number AS DECIMAL(10,2)), 0)
答案 2 :(得分:-2)
问题在于您尝试转换的数据类型,此字段包含非数字记录,因此必须在条件中添加密钥“ISNUMERIC”:
SELECT
a.number, --nvarchar
b.number --nvarchar
FROM
TableA AS a
TableB AS b
WHERE
CAST(COALESCE(ISNUMERIC(a.number)), 0), AS DECIMAL(10,2)) <> CAST(COALESCE(ISNUMERIC(b.number), 0), AS DECIMAL(10,2))