请参阅以下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 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
为什么它会以对比的方式表现,或者是误导性的时尚中显示的第二个错误。?
答案 0 :(得分:1)
在第一个查询中,SELECT 3 [COL]
产生INT
,SELECT CAST(1.24 AS DECIMAL(10,3)) [COL]
产生DECIMAL
; data type precedence表示尝试DECIMAL
,1.24
成功转换。
在第二个查询中,SELECT 3 [COL]
产生INT
,SELECT CAST(1.24 AS NVARCHAR(10)) [COL]
产生NVARCHAR
; data type precedence表示尝试INT
,但1.24
更好DECIMAL
。
在第三个查询中,SELECT 1.0 [COL]
产生DECIMAL
,SELECT CAST(1.24 AS NVARCHAR(10)) [COL]
产生NVARCHAR
; data type precedence表示尝试DECIMAL
,1.24
成功转换。
总结:
DECIMAL
之前 INT
在INT
NVARCHAR