プロが教えるわが家の防犯対策術!

はじめまして。
SQLにて、”指定の文字「-」を検索し、先頭から「-」のひとつ前までを取得”を実現したいのですが、
これは実現できますでしょうか。(substrやinstrなどでは無理そうなので、お知恵お借りしたいです。)

例)
01234567-001
0123456-001
012345-001
0123456789-001

上記に対して、期待する実行結果は次の通りです。
01234567
0123456
012345
0123456789

こんなことは可能でしょうか。

A 回答 (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;

こんな感じとかでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/04/14 21:09

substrとinstrでできると思いますが。



select substr(col, 1, instr(col, '-') - 1)
from tbl;

でいいのではないでしょうか。
'-'が含まれていない場合はnullが返りますので、そのあたりの制御が必要であれば適宜修正してください。

10g以降であれば、正規表現を使って
select regexp_replace(col, '-.+', '') -- '-'以降のすべての文字を置き換える
from tbl;
こんなのでもいいかもしれません。

この回答への補足

ご回答ありがとうございます!

>-'が含まれていない場合はnullが返りますので、
>そのあたりの制御が必要であれば適宜修正してください。

ちなみに、colがNULL('-'が含まれない)場合に、colのそのままの値を出力という形にすることは可能でしょうか。

補足日時:2014/04/08 19:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!