3

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

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

这将返回值为 0 的行

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

4

1 回答 1

12

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

自己试试:

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

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

于 2013-01-28T16:27:04.917 回答