Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql “除外”中的转换错误_Sql_Sql Server_Tsql - Fatal编程技术网

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

请参阅下面的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

为什么它的行为方式是相反的,或者第二个错误是以误导性的方式显示的?

在第一个查询中,
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


:“当运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型”int-trumps char-数据类型优先级;1.24被视为字符串,1被视为数字,即使u将其转换。在另一种方式中,它尝试采用first select 1 int的形式,3 varchar被视为1 int,3 int除外。但除1.24 varchar之外的1 int不能,因为它不能强制使用十进制。链接到数据类型优先级的功劳应该归于该问题的评论者。