3

これは以前私を困惑させたものですが、私はそれについての説明を見つけたことがありません。SQLServer2008データベースにタイプの列があります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 に答える