2016-07-12 6 views
0

空の文字列をデータベーステーブルの列に挿入すると、内部的にはNULLとして格納されているように見えます。では、空の文字列を正確に探して、それぞれの行を選択できないのはなぜですか?oracleの空の文字列

例:

insert into mytable (mycolumn,col2,col3) values ('','xyz','abc'); 

// now there is a row having mycolumn == NULL 

select * from mytable where mycolumn=''; 

// empty :(

私はそれについて何ができますか?

+0

関連http://stackoverflow.com/questions/203493/why-does-oracle-9i-treat-an-empty-string-as-null/203536#203536 –

答えて

3

これは、Oracleの奇妙な時代錯誤(デフォルト設定を使用)です。 Oracleは実際には、空の文字列をNULLとして扱います。 (NULL <> NULL

where mycolumn = NULL 

そして、これは決してtrueを返すん:

where mycolumn = '' 

と同じである。これには、比較に含まれています。

私の意見は? NULLを明示的に使用して書いています。

where mycolumn is null 
+0

upvoted時代錯誤のために:P – SriniV

+0

これは本当に – Ferenjito

+0

を吸います「デフォルト設定を使用する」に関するあなたのサイドノートに興味があります。空の文字列をNULLと違うものとして扱うようにOracleに依頼できる設定があることは気づいていませんでした。あなたは詳細を教えていただけますか?ありがとう! – mathguy

2

オラクルは奇妙な方法です。 NULLと空の文字列を同一として扱います。そのため、= ''または!= ''を持つものは論理値がUNKNOWNで、決してTRUEではありません。空文字列と等しいかどうかを調べるには、mycolumnがNULLかどうかをチェックする必要があります。 (ただし、NULLのチェックについては、この部分はOracleではありません - SQL標準です)。いずれの場合でも、Oracleでは等価条件は==ではなく=です。

1

Read here

空の文字列は、OracleにNULL値として扱われます。また、null値が通常のオペランド(=、<、>など)をnull値で使用できないという点で、ヌル値が一意であることに注意することも重要です。代わりに、IS NULLおよびIS NOT NULL条件を使用する必要があります。

0

NULL値は、不明なデータまたは不明なデータを表します。 NULL値は、実際のデータが存在しないことを示すために、プレースホルダまたはカラムのデフォルトエントリとして使用されます。 NULLは、SQLでは型なしです。つまり、整数、文字、またはその他の特定のデータ型ではありません。

NULLは、空のデータ文字列または数値「0」と同じではありません。 NULLは値がないことを示しますが、空の文字列と数値ゼロは両方とも実際の値を表します。 NULLを表すか、またはデータ型に一致しないので

NULL値を割り当てることができますが、それはitself.It含めて、何と同一視することはできませんが、null値が

一意であることに注意することも重要です=、<、または<>などの比較演算子を使用してNULL値をテストすることはできません。

これは、OracleのNULLについて明確に理解するのに役立ちます。