DNa*_*Nac 3 sql t-sql sql-server nullif sql-server-2017
为什么下面的脚本返回NULL而不是0?
DECLARE @number BIGINT = 0;
SELECT NULLIF(@number, '');
Run Code Online (Sandbox Code Playgroud)
根据 MSDN,它应该返回0:
NULLIF
如果两个指定的表达式相等,则返回空值。
对于SQL server,0和''被认为是一样的(=equal)?背后的逻辑是什么?
当一个运算符组合两个不同数据类型的表达式时,数据类型优先级规则指定优先级较低的数据类型转换为优先级较高的数据类型。
SELECT CONVERT(bigint, '')
SELECT CONVERT(float, '')
SELECT CONVERT(date, '')
0
0
1900-01-01
Run Code Online (Sandbox Code Playgroud)
https://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql