Oracle 関数 CHR,DUMP で制御文字を扱う
今まで使ったことの無かった、つまり用の無かった関数です。
Oracle 10g以降は正規表現が標準で使えるようになったので、また別のアプローチもあるかと思いますが、今回は9iでの話。
SQL*PLUSや通常のビューアでは、改行文字やタブ文字を見分けることができません。
DUMP関数を使うと、バイナリ値が参照できます。
SQL> SELECT DUMP(CONTENT) FROM TEST; DUMP(CONTENT) -------------------------------- Typ=1 Len=2: 13,10 SQL>
デフォルトでは10進数で表示されるので、16進数で表示したい場合はDUMP(CONTENT,16)とします。データが大きい場合は...どうなるかは試してません。
CHR関数を使うと、文字コードに対応する文字を取得できます。
文字列中のCR(キャリッジリターン)を全て取り除きたい場合は、
SQL> UPDATE TEST SET CONTENT=REPLACE(CONTENT,CHR(13),''); SQL>
とすれば良いです。
余談ですが、実際に遭遇したのは、VARCHAR2のフィールドにCHR(0)が含まれていたという問題でした。
何処かから貰ってきたのかと思ったら、自分のところのバッチでわざわざ入れていたということが判明。おそらくNULLを設定したかったんでしょうけどね。
もう、誰よ、こんなことしたの...