trapemiyaの日記

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

OracleとSQL ServerのSQLを同時に書いているとついnullの処理でうっかりしてしまう・・・

SQL Serverで、nullの場合に他の値に置き換える関数は、isnull。Oracleは、nvl。
まぁ、これは簡単なことなんだが、nullの時に空文字に置き換えようと、SQL Serverで以下のように書いていると

isnull(A項目, '')

つい、Oracleでも、

nvl(A項目, '')

と書いてしまう。
これは全く意味がなくて、A項目がnullならnullにnvlで置き換えていることになる(笑)
Oracleは空文字とnullが同じ扱いなので、つまり、空文字はnullになってしまうからである。
よって、

nvl(A項目, ' ')

と、nullの時には空白に置き換えなければならない。

この、

nvl(A項目, '')

は、わかりにくいバグで、実行時に初めて発覚するからやっかいである。
注意!注意! 自戒の意味を込めて。