HOME >> Tips >> Oracle

SQLの条件式で文字列項目のデータなし(NULLではない複数の空白)を判断する方法

2017/2/2
文書番号:20681



SQL で文字列型のデータに対して空白であることを条件式で判断したいときの方法です。

CHAR型の項目やVARCHAR型の項目で「NULL」ではなく、「いくつかの空白(スペース)がセットされている」という場合です。

CHAR型の場合はひとつ以上の半角スペースをセットすると、データサイズ分いっぱいに半角スペースがセットされますので CHAR(10)の項目の場合、WHERE句に半角スペース10個を指定すれば判断することもできます。


WHERE COL01 = '          '
「NULLもしくは空白のもの」を条件指定したい場合は以下のように指定できます。

WHERE COL01 IS NULL
OR    COL01 = '          '
しかし、VARCHAR型の場合はそうはいきません。
例えばVARCHAR(10)だとすると、半角スペースが1個、2個、・・・10個の場合があり得るのです。
上記のように「NULLもしくは空白のもの」を条件指定したい場合は以下のようになってしまいます。

WHERE COL01 IS NULL
OR    COL01 = ' '
OR    COL01 = '  '
OR    COL01 = '   '
・・・
OR    COL01 = '          '
ありえないですね。。。
そもそも、そのような状況になる設計やツクリが悪いのですが、それはもうどうしようもなくて、でもこれを判断しないといけない場合はスマートに以下のように指定できます。

WHERE trim(COL01) IS NULL
文字型の項目でスペースのみがセットされたデータに対してTRIMするとNULLになります。
(CHAR型でも VARCHAR 型でも同じです。)
ですので「TRIM(列名) IS NULL」 で判断することができます。