• ベストアンサー

SQL-文字列操作について

はじめまして。 SQLにて、”指定の文字「-」を検索し、先頭から「-」のひとつ前までを取得”を実現したいのですが、 これは実現できますでしょうか。(substrやinstrなどでは無理そうなので、お知恵お借りしたいです。) 例) 01234567-001 0123456-001 012345-001 0123456789-001 上記に対して、期待する実行結果は次の通りです。 01234567 0123456 012345 0123456789 こんなことは可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.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; こんな感じとかでしょうか。

london1985
質問者

お礼

お返事が遅くなりまして、大変申し訳ございません。 また、もうひとつの質問のほうにも記載させていただきましたが、重複する質問を別個にあげてしまい、申し訳ございませんでした。 yamada_gさんにお答え頂いた内容で、確実に解決致しました、 非常に助かりました。ありがとうございます。

その他の回答 (1)

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.1

substrとinstrでできると思いますが。 select substr(col, 1, instr(col, '-') - 1) from tbl; でいいのではないでしょうか。 '-'が含まれていない場合はnullが返りますので、そのあたりの制御が必要であれば適宜修正してください。 10g以降であれば、正規表現を使って select regexp_replace(col, '-.+', '') -- '-'以降のすべての文字を置き換える from tbl; こんなのでもいいかもしれません。

london1985
質問者

補足

ご回答ありがとうございます! >-'が含まれていない場合はnullが返りますので、 >そのあたりの制御が必要であれば適宜修正してください。 ちなみに、colがNULL('-'が含まれない)場合に、colのそのままの値を出力という形にすることは可能でしょうか。

関連するQ&A