2016-12-12 9 views
0

データベースのいずれかのテーブルで、nvarchar(50)のような詳細を持つ列の値はabc $ xyzです。この列の$ symbolの後のすべてを別のテーブルに展開したいと思います。Oracleデータベースに接続されたvarcharから文字を抽出する

+1

これまでに試したことはありますか(ご質問にはコメントではなくコードを含めてください)。 – Igor

+1

'$'のインスタンス/発生は1つしかありませんか? – JohnHC

+0

はい、確かに$のインスタンスが1つしかありません –

答えて

2

使用SUBSTRやINSTR

select substr(MyString,instr(MyString,'$')+1) as NewString -- Use +1 to exclude the '$' 
from MyTable 
+0

それは働いていました。しかし、 '、'の最後の2番目の出現から部分文字列を取らなければならない場合はどうでしょうか? –

0

REGEXP_REPLACEも動作します:

SQL> SELECT regexp_replace('abc$xyz','.*\$') result FROM dual; 

RESULT 
------ 
xyz 

SQL> 
+0

ほとんどの場合、regexpはinstrとsubstr存在しない。 – mathguy

+0

私は個人的に入れ子になったSUBSTR/INSTR式を渡して嫌いです。私はそれらを読みにくく、REGEXP機能を好む。パフォーマンスへの影響があると私は理解しています。 – DCookie

+0

私は同意します。つまり、「**単純な**解決策が存在しないとき」と言いました。この場合、instrとsubstrを使用するソリューションは非常に単純なので、regexp_replaceソリューションよりも読み込みとメンテナンスが難しくなることはありません。 – mathguy

0

すでにREGEXを使用している場合、私は REGEXP_SUBSTR となるだろう。

select regexp_substr('abc$xyz','[^$]*$') result from dual; 
関連する問題