SQLメモ。

SQL弄ってたら微妙に困ったので備忘録。マニュアルには多分書いてあると思いますが。SELECTした際にNULL値だったものを次のように加工した時に。

SQL> SELECT TO_CHAR(NVL(NULL, 0), '0000') FROM DUAL;

TO_CH
        • -
0000

一見すると別に問題なさそうなんですが、

SQL> SELECT LENGTH(TO_CHAR(NVL(NULL, 0), '0000')) FROM DUAL;

LENGTH(TO_CHAR(NVL(NULL,0),'0000'))
                                                                    • -
5

先頭に1バイトのスペースが入ってしまいます。固定長のデータへ取り込む際に困ったりするので、以下のように。

SQL> SELECT TO_CHAR(NVL(NULL, 0), 'FM0000') FROM DUAL;

TO_CH
        • -
0000 SQL> SELECT LENGTH(TO_CHAR(NVL(NULL, 0), 'FM0000')) FROM DUAL; LENGTH(TO_CHAR(NVL(NULL,0),'FM0000'))
                                                                        • -
4

それだけ。