这是让我感到困惑的事情,但我从未找到任何解释。我在类型为smallint
的SQL Server 2008数据库中有一列。我想查找值是NULL
或空白的任何行,所以我这样说:
SELECT *
FROM products
WHERE warranty_dom IS NULL
OR warranty_dom = ''
这将返回值为0的行
那么为什么
0
被视为与''
等效? 最佳答案
本身不将0视为''。而是将''隐式转换为整数,然后将其转换为0。
自己尝试:
SELECT CAST(0 AS varchar) -- Output: '0'
SELECT CAST('' AS smallint) -- Output: 0
另外,如在其他地方提到的:如果guarantee_dom的类型为smallint,则一开始它不可能为空。