一部の行に空白cells
が含まれているテーブルがあります。 IS NULL関数を使用してそのような行を選択しようとしましたが、クエリは0行を選択しました。
select * from zzz_fkp_registration_female where fname is null;
(0 row(s) affected)
今私は私のクエリを次のように変更しました:
select * from zzz_fkp_registration_female where fname is null or fname ='';
望ましい結果が得られました。
IS NULLが結果を出さないのはなぜですか?セルが空であるため、IS NULL
と''
の違いは何ですか。説明してください。
それらの間のいくつかの違い:
NULL
は、日付/数値フィールドと互換性がない空の文字列とは対照的に、任意のタイプに割り当てることができます。NULL
は不明な値です。値である空の文字列とは対照的に、値はありませんが空の文字列です。NULL
は空の文字列をキャプチャするのではなく、メモリをキャプチャするべきではありません。null = null
はnull
になる''=''
とは対照的に、TRUE
になります。Nullは値がないことです。空の文字列は値ですが、空です。
Nullはデータベースにとって特別です。
NULLを使用すると、「データを入力しない」と「空のデータを入力する」を区別できます。
さらにいくつかの違い:
NULLのLENGTHはNULL、空の文字列のLENGTHは0です。NULLは空の文字列の前にソートされます。 COUNT(message)は空の文字列をカウントしますがNULLはカウントしませんバインドされた変数を使用して空の文字列を検索できますが、NULLは検索できません。このクエリ:
SELECT *
FROM mytable
WHERE mytext = ?
クライアントから渡した値に関係なく、mytextのNULLには決して一致しません。 NULLを照合するには、他のクエリを使用する必要があります
SELECT * FROM mytable WHERE mytext IS NULL
値がないためNULLを見つけることができません
空の文字列は値ですが、空です。
その値の場合のみ、別の値と比較できます
次のようにクエリを変更できます。
select * from zzz_fkp_registration_female where isnull(fname,'') = '';
このクエリでは、すべての空白セルとnull値のセルが生成されます。
注意:
NULLを含むセルと空のセルは2つの異なるものだからです。つまり、-> NULLは ''または ""と同じではありません。