为什么数字0评估为空格

时间:2013-01-28 16:24:26

标签: sql sql-server sql-server-2008

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

SELECT *
FROM products
WHERE warranty_dom IS NULL
OR warranty_dom = ''

这将返回值为0

的行

那么为什么0被视为等同于''

1 个答案:

答案 0 :(得分:12)

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

亲自尝试:

SELECT CAST(0 AS varchar)        -- Output: '0'
SELECT CAST('' AS smallint)      -- Output: 0

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