web-dev-qa-db-ja.com

空の文字列とNULL

一部の行に空白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''の違いは何ですか。説明してください。

10
nischalinn

それらの間のいくつかの違い:

  • NULLは、日付/数値フィールドと互換性がない空の文字列とは対照的に、任意のタイプに割り当てることができます。
  • NULLは不明な値です。値である空の文字列とは対照的に、値はありませんが空の文字列です。
  • 私の知る限り、NULLは空の文字列をキャプチャするのではなく、メモリをキャプチャするべきではありません。
  • null = nullnullになる''=''とは対照的に、TRUEになります。
13
sagi
  • Nullは値がないことです。空の文字列は値ですが、空です。

  • Nullはデータベースにとって特別です。

  • Nullには境界がなく、データベースの文字列、整数、日付などのフィールドに使用できます。
  • NULLにはメモリが割り当てられません。NUll値の文字列は、メモリ内のどこも指し示していない単なるポインタです。ただし、空のISはメモリの場所に割り当てられていますが、メモリに格納されている値は ""です。

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

2
mansi

値がないためNULLを見つけることができません

空の文字列は値ですが、空です。

その値の場合のみ、別の値と比較できます

1
Jbadminton

次のようにクエリを変更できます。

select * from zzz_fkp_registration_female where isnull(fname,'') = '';

このクエリでは、すべての空白セルとnull値のセルが生成されます。

注意:

  1. NULL値は、不明なデータの欠落を表します。
  2. 空白データは、入力時に空白として入力された実際のデータです。
1
Paresh J

NULLを含むセルと空のセルは2つの異なるものだからです。つまり、-> NULLは ''または ""と同じではありません。

0
Palash Som