EXCEPT中的转换错误

时间:2014-06-26 12:31:38

标签: 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 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

为什么它会以对比的方式表现,或者是误导性的时尚中显示的第二个错误。?

1 个答案:

答案 0 :(得分:1)

在第一个查询中,SELECT 3 [COL]产生INTSELECT CAST(1.24 AS DECIMAL(10,3)) [COL]产生DECIMAL; data type precedence表示尝试DECIMAL1.24成功转换。

在第二个查询中,SELECT 3 [COL]产生INTSELECT CAST(1.24 AS NVARCHAR(10)) [COL]产生NVARCHAR; data type precedence表示尝试INT,但1.24更好DECIMAL

在第三个查询中,SELECT 1.0 [COL]产生DECIMALSELECT CAST(1.24 AS NVARCHAR(10)) [COL]产生NVARCHAR; data type precedence表示尝试DECIMAL1.24成功转换。

总结:

    DECIMAL

    之前
  • INTINT

  • 之前
  • NVARCHAR