1. ホーム
  2. sql

[解決済み] Oracle SQLで特定の文字までの部分文字列を選択するには?

2023-05-15 18:44:54

質問

テーブルのカラムに次のような結果があるとします。

ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore

テーブルからこのカラムを選択し、アンダースコア (_) 文字までの部分文字列のみを返すクエリを書けるようにしたいと思います。例えば

ABC
DEFGH
IJKLMNOP

SUBSTRING関数は位置指定でアンダースコアの位置が変わるので、このタスクには対応していないようです。

TRIM関数(具体的にはRTRIM関数)を考えてみました。

SELECT RTRIM('listofchars' FROM somecolumn) 
FROM sometable

しかし、これは特定のリスト/セットの文字しか削除しないようで、私は本当にアンダースコア文字につながる文字の後だけなので、私はこれをどのように動作させるかわからないです。

どのように解決するのですか?

SUBSTR、INSTR、NVL(アンダースコアのない文字列の場合)を組み合わせて使用すると、希望通りの結果が得られます。

SELECT NVL(SUBSTR('ABC_blah', 0, INSTR('ABC_blah', '_')-1), 'ABC_blah') AS output
  FROM DUAL

結果

output
------
ABC

使用する。

SELECT NVL(SUBSTR(t.column, 0, INSTR(t.column, '_')-1), t.column) AS output
  FROM YOUR_TABLE t

参考

追記

Oracle10g+を使用している場合、正規表現を使用するために REGEXP_SUBSTR .