trapemiyaの日記

hatenablogが新しくなったんで新規一転また2019年1月からちょこちょこ書いてます。C#中心のプログラミングに関するお話です。

【Oracle】NVL関数ではまる。NZLから返される値と比較する場合、末尾の空白を考慮する必要がある

NVL関数は、レファレンスによると、

NVL( 文字列 , 変換文字列 ), 文字列 がNULLの場合は、変換文字列を返します。

とある。いたって簡単かつ便利な関数である。
ところがである。これにchar(2)などの固定長の項目を適用すると、末尾の空白を含めて比較しなければならなくなる。

カラムAがchar(2)だとすると、ここに、'Q 'という値が入っているとする。

カラムA = ’Q' はtrueになる。

しかし、

NVL(カラムA, '') = 'Q' は、falseになってしまう。

NVL(カラムA, '') = 'Q ' と、Qの末尾に空白を付けるとtrueになる。

注意が必要だ。