为什么数字0评估为空格

val*_*lis 3 sql sql-server sql-server-2008

这是令我困惑的事情,但我从来没有找到解释.我在SQL Server 2008数据库中有一个类型的列smallint.我想查找值为NULL空的任何行,所以我这样说:

SELECT *
FROM products
WHERE warranty_dom IS NULL
OR warranty_dom = ''
Run Code Online (Sandbox Code Playgroud)

这将返回值为0的行

那么为什么被0视为相当于''

Dan*_*Dan 12

0不被视为''本身.相反,''被隐式地转换为整数,并且该转换使其为0.

亲自尝试一下:

SELECT CAST(0 AS varchar)        -- Output: '0'
SELECT CAST('' AS smallint)      -- Output: 0
Run Code Online (Sandbox Code Playgroud)

另外,如其他地方所述:如果warranty_dom的类型为smallint,那么它首先不可能是空白的.