2017-02-05 11 views
-1

sqlの区切り文字で助けが必要です。私はDB2に取り組んでいますが、Oracleも良いです。sql区切り文字(DB2でもORACLEでもかまいません)

私はフォーマットのデータを持っています:[email protected] ここで 'aaa'、 'bbb'、 'ccc'、 'ddd'は一定の長さではありません。クエリはbbbとdddを返します。 DB2では、私は本当に長い行を取る '@ domain.com'をカットすることができます。休憩私はどのように動くか分かりません。私はSUBSTRで試してみましたが、私のクエリが長すぎるとは思わないようなものは何もありません。

私はブロックしないでください。 例:列の データ:一般に

[email protected] 
[email protected] 
[email protected] 

Iは、第1、第2セパレータ.@の前にあるものとの間でデータを取得する必要があります。

+0

セパレータの数に制限はありますか?あなたは "@"の前にセグメントに最大3を表示します。どの行にも4つありますか? 4つは可能なの?最小二人ですか? – user2338816

答えて

0

誰かが賢明なREGEXの方法をとると確信していますが、これを行う方法の1つです。

with test as 
(select '[email protected]' col1 from dual union all 
select '[email protected]' from dual union all 
select '[email protected]' from dual 
) 
select col1 
     , substr(col1, 1, dot_one-1) f1 
     , substr(col1, dot_one+1, dot_two - dot_one -1) f2 
     , no_domain 
     , substr(no_domain, dot_before_at+1) f3 
from 
(
select col1 
     ,instr(col1, '@', -1) at_pos 
     ,instr(col1, '.',1,1) dot_one 
     ,instr(col1, '.',1,2) dot_two 
     ,substr(col1, 1, instr(col1, '@', -1)-1) no_domain 
     ,instr(substr(col1, 1, instr(col1, '@', -1) -1) , '.', -1) dot_before_at 
from test 
) 
関連する問題