- ベストアンサー
改行コード
SQL文について教えていただきたいことがあります。 ある列に改行コードを含む文字列があります、 その文字列をまず改行コード毎に分割します、 その後に文字列の最後にある改行コードを消してしまいたいのですがどうすればよろしいでしょうか?みなさま宜しくお願い致します。 例)○=改行コード ABCD○ABCDE○ABC○ → ABCD○ ABCDE○ ABC○ → ABCD ABCDE ABC
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
まず、前提条件として'ABCD○ABCDE○ABC○'の改行マークの位置が固定位置であれば可能です。 takoponさんの回答にある様にSUBSTRを利用します。例えば改行マーク位置が5文字目/11文字目/15文字目という風に固定位置だと仮定すれば SELECT SUBSTR(Mark,1,4),SUBSTR(Mark,6,10),SUBSTR(Mark,12,3) into moji1,moji2,moji3 FROM ~ ちなみにMarkとう項目に'ABCD○ABCDE○ABC○'が設定されていて、分割後の変数がmoji1~moji3となります。 ということでINTO文でやれると思います。 文字列改行マーク位置が不定の場合はSQL文1回での処理は不可能なので、takoponさんのご指摘の通りPL/SQLであればFECH文を作成して項目単位での処理を行ってください。 VB,VBAであればレコードセットもしくはoo40でのリザルトセットを作成して回してください。
その他の回答 (3)
- takopon
- ベストアンサー率69% (27/39)
OracleのPL/SQL文でということならば、 INSTRB(S,CHR(13)||CHR(10),1)で 文字列Sの先頭から初めて出現する改行コードのCRの位置Xをしらべて、 SUBSTRB(S,1,X - 1) で最初の改行までの文字列S1を、 SUBSTRB(S,X + 2) で残りの文字列S2を切り出して、 S1をどこかテーブルか何かに格納し、 S2をSに代入 というような処理をループさせれば、 改行を除去した結果が取れると思います。
- bin-chan
- ベストアンサー率33% (1403/4213)
> その文字列をまず改行コード毎に分割します レコードが複数作成される、ということなんでしょうか? (上記の例なら1行が3レコードに分割される、ということ?) レコードにその他の列はあるのでしょうか? 無いのならばOracleなり、Accessなり、CSV出力する文を作成して、 インポートし直すのがもっとも簡単かと思います。
SQL文の質問というよりは、DBから取得した文字列を加工する、開発言語側の質問のように思いますが。 開発言語はなにを使うのでしょうか?
補足
SQLデータベースでストアドプロシージャを作成して結果セットを取得する途中で、 質問内容を実現したいのですが、どうでしょうか?