这令我困惑,但我从来没有找到解释。我在SQL Server 2008数据库中有一个类型为smallint
的列。我想查找值为NULL
或空白的任何行,所以我这样说:
SELECT *
FROM products
WHERE warranty_dom IS NULL
OR warranty_dom = ''
这将返回值为0
的行那么为什么0
被视为等同于''
?
答案 0 :(得分:12)
0本身不被视为''。相反,''被隐式地转换为整数,并且该转换使其为0。
亲自尝试:
SELECT CAST(0 AS varchar) -- Output: '0'
SELECT CAST('' AS smallint) -- Output: 0
另外,如其他地方所述:如果warranty_dom的类型为smallint,那么它首先不可能是空白的。