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


関連記事

ORACLEで「IMP-00013: DBAのみ別のDBAがエクスポートしたファイルをインポートできます。」の解決法。

客先DBのエクスポートしたものがインポートできずに、タイトルのエラーを吐く。 幸い、お客さんの目の前じゃなかったので、ゆっくり調べて解決できたけど、客先で発生したら困るよなぁ・・・ もともと英語のメッ …

VisualStudioでデータテーブルの中身確認できるの便利すぎワロタw

DataSetビジュアライザーで、DataTableの中身が確認できるのが便利すぎたのでメモ。 データテーブルって気軽に使えるけど、中身の確認がしち面倒くさい件 本当のところはどうなのか?ってのは知ら …

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

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

TortiseSVNなんだけど、自分が原因で「already locked」が出てしまった時の対処法。自分がロックを取ってて、ロックが取れずコミットが出来ない事態に遭遇した・・・

SVNを使っていると、たまにありますね。 ロックが既に誰かに取得されていて、コミットしようとした時に、唖然とするやつ。 ただ、今回は状況が違いました。 いつもなら、「ロック取ってるやつ誰だよ~」って感 …

SQLのJOINの種類を理解する

これは分かりやすい。 https://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ INNNER JOIN FULL OUTER J …


カテゴリー