文字列の検索と抽出を一度にする関数
Oracle SQL Developerでストアドプロシージャを組んでいて正規表現を使って特定の文字を検索して、
文字を抜き出さなければならない場面がでた。
正規表現は苦手というか見た目が好きでないけど、四の五の言ってられなかった。
やることはCSVファイルのから値を抜き出して、
それを指定のテーブルに格納するというもの。
でもここではREGEXP_SUBSTRについて自分が学んだことを記録する。
そもそもREGEXP_SUBSTRって何ぞやから始まって、
結局のところInstr(文字列から特定の文字を検索)とSubstr(文字列を部分的に抜き出す)の
これら二つの関数の特性を合わせもった関数みたいだ。
書き方は
REGEXP_SUBSTR(対象の文字列, 正規表現のパターン, 取り出す文字列の開始位置);
と、たいていは上記のような書き方になる。
自分が使ったCSVの値の構成は、
"文字列",
のようなクォートで値が囲まれてのカンマ区切りという構成で、
これから文字列のみを抜き出す。
文法に当てはめると、
REGEXP_SUBSTR('対象の文字列', \"([^\"])*\", 3);
これでダブルクオテーションで囲まれた文字列の0番目から数えて3つ目以降の
文字列が抜き出されます。
もし文字列の中にダブルクオテーションがある場合は、
REGEXP_SUBSTR('対象の文字列', \"(\\\"|[^\"])*\", 3);
と記述すると文字列のなかにダブルクオテーションがあっても、
文字列が抜き出されます。
正規表現は自分にとってややこしいので地道に慣れるしかないな。。