1

私はいくつかのSQLに問題があります。次のクエリを実行すると:

Select * from teleapp;

たくさんの結果が得られます。多数の空または null データ セルを含む列 (cashwithappyn と呼ばれる) を含む結果。(それらは空に見え、null とは言いません)

列情報は次のとおりです。

ColumnName      ID          Null? Data Type             Histogram   Num Distinct  Num Nulls    Density
CASHWITHAPPYN   54          Y     VARCHAR2(1 Byte)      Frequency   2             56895         0               

次のクエリを実行しようとすると:

Select * from teleapp where cashwithappyn = null;

また

Select * from teleapp where cashwithappyn = '';

また

Select * from teleapp where cashwithappyn not like '';

また

Select * from teleapp where cashwithappyn not in ('Y','N');

または任意のタイプの組み合わせで、cashwithappyn に何もない行をすべて取得できないようです。

何か案は?助けてください。これは私が割り当てられたプロジェクトの最後の部分であり、これを理解する必要があります。

ありがとう。

4

4 に答える 4

6

列に空白が含まれている可能性があります。その場合、あなたはすることができます

WHERE TRIM(CASHWITHAPYYN) IS NULL

TRIM前後のすべての空白を削除し、何も残っていない場合、値は次のようになりますNULL

例えば

TRIM(' ') IS NULL -- one blank removed = true
TRIM(NULL)  IS NULL -- true

NULLと比較することはできませんが、表現する= NULL必要がありますIS NULLNULLは値そのものではないため、比較が機能しません。

于 2012-09-27T18:41:39.220 に答える
5

IS NULL を使用する必要があります

Select * from teleapp where cashwithappyn is null;
于 2012-09-27T17:04:20.267 に答える
4

null を含む論理テスト式 (=、Not In、Like など) は false になるため、以下の結果はすべて false になります。

1 = NULL
1 <> NULL
NULL = NULL
NULL <> NULL
NULL NOT IN ('a','b')
NULL Not Like NULL

さらに、オラクルでは長さゼロの文字列はnullであるためNOT LIKE ''、行が返されることはありません

is nullis not nullまたはのいずれかを使用する必要がありますCoalesce

于 2012-09-27T17:08:28.193 に答える
0

同僚と私はたくさんの調査を行いました。これが機能するのに他の機能が機能しない理由はありますか?

Select * from teleapp where nvl(cashwithappyn,'U') = 'U';
于 2012-09-27T18:28:42.130 に答える