- ベストアンサー
SQL-文字列操作について
はじめまして。 SQLにて、”指定の文字「-」を検索し、先頭から「-」のひとつ前までを取得”を実現したいのですが、 これは実現できますでしょうか。(substrやinstrなどでは無理そうなので、お知恵お借りしたいです。) 例) 01234567-001 0123456-001 012345-001 0123456789-001 上記に対して、期待する実行結果は次の通りです。 01234567 0123456 012345 0123456789 こんなことは可能でしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
decodeだったりnullifとnvlの組み合わせだったり方法はいくらでもあると思いますが、case式を使う例だと select case when instr(col, '-') > 0 then substr(col, 1, instr(col, '-') - 1) else col end as col from tbl; こんな感じとかでしょうか。
その他の回答 (1)
- yamada_g
- ベストアンサー率68% (258/374)
substrとinstrでできると思いますが。 select substr(col, 1, instr(col, '-') - 1) from tbl; でいいのではないでしょうか。 '-'が含まれていない場合はnullが返りますので、そのあたりの制御が必要であれば適宜修正してください。 10g以降であれば、正規表現を使って select regexp_replace(col, '-.+', '') -- '-'以降のすべての文字を置き換える from tbl; こんなのでもいいかもしれません。
補足
ご回答ありがとうございます! >-'が含まれていない場合はnullが返りますので、 >そのあたりの制御が必要であれば適宜修正してください。 ちなみに、colがNULL('-'が含まれない)場合に、colのそのままの値を出力という形にすることは可能でしょうか。
お礼
お返事が遅くなりまして、大変申し訳ございません。 また、もうひとつの質問のほうにも記載させていただきましたが、重複する質問を別個にあげてしまい、申し訳ございませんでした。 yamada_gさんにお答え頂いた内容で、確実に解決致しました、 非常に助かりました。ありがとうございます。