Sql “除外”中的转换错误
请参阅下面的SQL语句Sql “除外”中的转换错误,sql,sql-server,tsql,Sql,Sql Server,Tsql,请参阅下面的SQL语句 SELECT 3 [COL] EXCEPT SELECT CAST(1.24 AS DECIMAL(10,3)) [COL] result 3.000 在这里,似乎3被转换成十进制(10,3) 请参阅下一个SQL SELECT 1 [COL] EXCEPT SELECT CAST(1.24 AS NVARCHAR(10)) [COL] result Msg 245, Level 16, State 1, Line 1 Conversion failed when c
SELECT 3 [COL]
EXCEPT
SELECT CAST(1.24 AS DECIMAL(10,3)) [COL]
result
3.000
在这里,似乎3被转换成十进制(10,3)
请参阅下一个SQL
SELECT 1 [COL]
EXCEPT
SELECT CAST(1.24 AS NVARCHAR(10)) [COL]
result
Msg 245, Level 16, State 1, Line 1
Conversion failed when converting the nvarchar value '1.24' to data type int.
这里,1.24被转换成INT
如果我们将1设为1.0(十进制),那么sql同样可以正常工作
SELECT 1.0 [COL]
EXCEPT
SELECT CAST(1.24 AS NVARCHAR(10)) [COL]
result:
1.0
为什么它的行为方式是相反的,或者第二个错误是以误导性的方式显示的?在第一个查询中,
SELECT 3[COL]
生成一个INT
,而SELECT CAST(1.24作为十进制(10,3))[COL]
生成一个十进制
;表示尝试使用DECIMAL
,并成功转换1.24
在第二个查询中,select3[COL]
生成一个INT
,selectcast(1.24为NVARCHAR(10))[COL]
生成一个NVARCHAR
;表示尝试使用INT
,但1.24
作为DECIMAL
更好
在第三个查询中,SELECT 1.0[COL]
生成一个DECIMAL
,SELECT CAST(1.24为NVARCHAR(10))[COL]
生成一个NVARCHAR
;表示尝试使用DECIMAL
,并成功转换1.24
总之:
INT
在INT
NVARCHAR