[Oracle]regexp_replaceで、改行コード・タブとかのCSV出力時に邪魔になるものを消す

投稿日:

通常、スペースを消したい時とかなら、replaceとかtrimとかで一括で処理してたんだけど、CSVに出力したい時に、複数の処理を纏めるのがスゲェ面倒くさかった。

それがregexp_replaceで一括処理出来るって分かった。

Oracle10g以降で使える

らしいです。

それ以前のバージョンでは使えなさそうなので、replaceとかで頑張るしかなさそう・・・

改行コードがあると何が問題なのか

例えばこんなSQL

select 1 || chr(13) || chr(10) || 2 || chr(13) || chr(10) || 3 
from dual;

出力結果はこんな感じになる。

実行結果は改行されていないように見える。

テキストに貼り付けると、改行されてる。

Excelでは、1つのセル内での改行。

PGで画面出力する時も、グリッドのセル内に収まるし、見た目上は改行されていないように見えているので基本的には問題がない。

そう、基本的には。

今回、問題になったのは、CSV出力時。

イメージだけど、

こうなる。

行の途中で改行される・・・

 

まぁ出力時に「”」で括ってしまえばいいんだけど、出力用の共通関数を使っているので、そこに手を入れるのは避けたい。

 

どうしよう・・・

 

って時に見つけた。

実際にregexp_replaceを試してみる


select
regexp_replace(1 || chr(13) || chr(10) || 2 || chr(13) || chr(10) || 3
,'[[:space:]]'
,''
)
from dual;

[/

出力結果はこんな感じになる。

実行結果は改行されていないように見える。

テキストに貼り付けると、改行されてない。

Excelでは、1つのセル内での改行されてない。

1つ問題が・・・


select
regexp_replace(1 || chr(13) || chr(10) || 2 || chr(13) || chr(10) || 3
,'[[:space:]]'
,','
)
from dual;

[/

先の例では分からないけど、置換用の文字を入れると

こんな風になってしまう・・・

これ、windows環境下で改行が入力されるとCRLF:chr(13)chr(10) の組み合わせで改行コードになるので、それぞれを置換してしまって、「,,」ってなってしまうんだよね。

改行コードのほかにタブ:chr(9)とかも対象。

[[:space:]]が印刷不可能文字を対象とするとの事なので、他にも何か影響があるかもしれない。

最終的にreplaceで落ち着いた

結局、replace(文字列,chr(13) || chr(10),’ ‘)って感じで落ち着きました。

処理したかったのは改行コードだけで、現行システムの稼動は基本的にWindows環境下。

他の印刷不可能文字まで調査する時間は無い。

ってことで、調べたけど使えなかったオチw







-ORACLE, 開発メモ
-,


関連記事

なぜ、エラーが発生する? VirtualBoxでのUbuntu Linuxの起動に再チャレンジ。

前回、会社で遊べる勉強できる環境としてUbuntu Linuxを導入しようと画策していました。 前回は、あえなく断念・・・ 日本の中心付近で仕様変更と闘うSE日記VMWareがだめだったから、Virt …

OracleでORA-01747 : 指定された列が無効ですのエラーの分かりづらさ・・・

OracleでORA-01747 : 指定された列が無効ですのエラーの分かりづらさったらありません・・・ SQLのUPDATE文の実行時に 「ORA-01747 : 指定された列が無効です」 とエラー …

[C#]NumericUpDownコントロールで、上下キーでの値変更を禁止する

結論から言うと、「InterceptArrowKeys」プロパティをfalseにしてやることで解決。 NumericUpDownコントロールを使うメリット 画面構築をしている際、ユーザーの任意入力項目 …

MSCOMCTL.OCXの読み込みに失敗しましたエラーの対応方法

結論から言うと、マイクロソフトのページから、必要なものをDLして、適用しましょうって話。 OS:Windows7 Pro 64bit DLしたファイル:VisualBasic6-KB896559-v1 …

ORACLEで他のスキーマでSQLを実行した時に、権限不足で「ORA-01031: 権限が不足しています。」のエラーになる

A5Mk2 http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/ 普段、SQL関連は、A5Mk2っていうソフトを使用しています。 今回のエラーは、自 …


カテゴリー