这是让我感到困惑的事情,但我从未找到任何解释。我在类型为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,则一开始它不可能为空。

10-08 15:23