こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

オラクルでのCASE式を使用した文字列の取り出し

Oracle10gの環境でBIツールを利用しています。

以下のような条件の場合のCASE式を使った文字列の取り出し方法が分からず悩んでいます。

「問合せ」というテーブルに『詳細内容』という項目があり、そこに以下のデータが格納されています。
============================================
問合せID  |  詳細内容
1      | No:1234 氏名:山田太郎 キャンペーンコード[1138] 
2      | No:4567 氏名:佐藤仁 キャンペーンコード[1220] 
3      | No:8910 氏名:藤原文太郎 キャンペーンコード[45509]
4      | No:3312 氏名:山田花子 紹介区分コード[45]

============================================

上記のようなケースにおいて、

・「キャンペーンコード」という文字列が含まれていたら
・カッコ内([]で囲まれた数値)の数値を抽出したい ※桁数変動します
・該当しない場合は「0」を返したい

ということをしたいと考えた場合に


CASE WHEN 詳細内容 LIKE '%キャンペーンコード%' THEN TO_NUMBER(SUBSTR('キャンペーンコード%',11,5)) ELSE '0' END

という苦し紛れの式を書いたのですが、うまくいかず。

SUBSTRの文字の取り出しの際にワイルドカードも使用できないようですし、キャンペーンコードの桁数も固定ではないので、どうにかうまく出来ないか悩んでいます。

詳しい方、教えて頂けたら助かります。

よろしくお願いします。

投稿日時 - 2016-08-30 09:40:59

QNo.9222123

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

抽出したい数字をかこっているものの他に [ と ] が出てこないのであればINSTRが使えるかもしれない。
ちょっと今手元にOracle無いので試せないけど、例えば

CASE WHEN 詳細内容 LIKE '%キャンペーンコード%' THEN TO_NUMBER(SUBSTR(詳細内容, INSTR(詳細内容, '[')+1, INSTR(詳細内容, ']')-INSTR(詳細内容, '[')-1)) ELSE 0 END

INSTRの引数とか、そこで得られた数字から何を足すじゃ何を引くじゃは研究していただきたい。
あと、どうでもいいけどTHENの中身がTO_NUMBERつまりNUMBERなのならELSEの時も'0'じゃなくて0ではないかな。

投稿日時 - 2016-08-31 16:53:20

あなたにオススメの質問