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

解決済みの質問

SQL-文字列操作について

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

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

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

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

投稿日時 - 2014-04-08 17:17:06

QNo.8546719

すぐに回答ほしいです

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

decodeだったりnullifとnvlの組み合わせだったり方法はいくらでもあると思いますが、case式を使う例だと

select
 case
  when instr(col, '-') > 0 then substr(col, 1, instr(col, '-') - 1)
  else col
 end as col
from tbl;

こんな感じとかでしょうか。

投稿日時 - 2014-04-09 10:09:07

お礼

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

投稿日時 - 2014-04-14 21:09:13

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

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

回答(2)

ANo.1

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

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

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

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

投稿日時 - 2014-04-08 18:41:20

補足

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

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

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

投稿日時 - 2014-04-08 19:19:21

あなたにオススメの質問