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


関連記事

コマンドプロンプトのFor文で、ファイルの一覧を表示する。

コマンドプロンプトの出力結果を引数として、別のコマンドを実行させる。 なんてことが出来ることは知ってるんだけど、どうやってやるのかは良く分からない。 おもむろにコマンドプロンプトを立ち上げて、以下のコ …

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

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

[ORACLE]oracleのログの場所(リスナーログ、アラートログ)

ぶっちゃけ、ログの場所なんて普段意識してないわwww 存在は知ってるものの、ぶっちゃけ、普段からそんな場所など意識していたことがない。 もちろん、何かあったときは、ファイル検索で見つけりゃいいや~と思 …

no image

Oracleの再受験無料キャンペーンは5月31日まで

【ピアソンVUE専用】Oracle会場試験用受験チケット(電子チケット) 価格:26,720円 (2019/5/19 14:11時点) 感想(15件) 【ピアソンVUE専用】Oracleオンライン試験 …

Oracleで「Ora-28001:the password has expired」のエラーの対処法

正直、自分で見たときに何が起こったのかわかりませんでしたw だって、初めて見るエラーだったし・・・ ということで、調べてみたら、パスワードの有効期限らしいですね。 対処法も簡単なので、サクッと対処法を …


カテゴリー