[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, 開発メモ
-,


関連記事

「再起動」それは、魔法の言葉:iOSでオンスクリーンキーボードが表示されない問題を解決する

客先へ送付予定の時に発生しました。 iPadを設定していた時に、キーボードが出てこなあい・・・ で、公式ページで下記の内容を発見。   Apple : iOS でワイヤレスキーボードを使った …

DLLのプロパティのブロック解除をして、ダウンロードしたプログラムを起動出来るようにする

よくありますよね・・・ いや、普通は無いかも・・・ 今、開発中のプログラムなんですが、正式なビルドはサーバーで実行してる訳です。 で、各自がアップロードされたEXE等をDLして最新の実行環境としてる。 …

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

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

続) 何度だって引っかかるORACLEのエラー・・・。ORA-01008:バインドされていない変数があります。

この土日は休日出勤でした・・・ そして、昨日・・・新しい現象が発生しました。 日本の中心付近で仕様変更と闘うSE日記日本の中心付近で仕様変更と闘うSE日記http://ht-jp.net/blog/p …

[VB.net]TextBoxで、マウスクリック(1回目)だけ、内容を全選択させる

結構前に書いた記事 日本の中心付近で仕様変更と闘うSE日記[C#]TextBoxで、マウスクリック(1回目)だけ、内容を全選択させるhttp://ht-jp.net/blog/pc/c/c-textb …


カテゴリー