2016-02-29 42 views
0

在這裏我寫了代碼,但也包含特殊字符also.But我的要求是要求用戶動態地給一封電子郵件並拆分該電子郵件時有沒有特殊字符發生與特殊字符我需要輸出。oracle查詢將遇到特殊字符時將[email protected]拆分爲列

col1  col2  col3 
------------------ 

example123 gmail com 

select substr('[email protected]',instr('[email protected]','@'),instr('[email protected]','.')) as col1 , 
    substr('[email protected]',1,instr('[email protected]','@')) as col2, 
    substr('[email protected]',instr('[email protected]','.'),length('[email protected]')) as col3 
    from dual; 
+0

定義 「特殊字符」。從你的輸出結果看,你認爲數字是「特殊字符」(例子vs example123),這將是一個相當獨特的定義。 –

+0

@,#$%^&*()_。這些是不是123的特殊字符謝謝 – kumar

+0

那麼當你的數據顯然是「example123」時,爲什麼你要返回「example」作爲「col1」? –

回答

1

我建議你使用REGEXP_SUBSTR用於分割字符串

方法1

在下面的例子中,對於每一個新字和行的行而colnumbers是結果集的一部分。我建議你使用這種方法,因爲你不知道的話/ colummns的數量事先

查詢1

with MyString as 
(   select '[email protected]' Str, 1 rnum from dual 
) 
,pivot as (
    Select Rownum Pnum 
    From dual 
    Connect By Rownum <= 100 
) 
SELECT REGEXP_SUBSTR (ms.Str,'([[:alnum:]])+',1,pv.pnum), ms.rnum, pv.pnum colnum 
    FROM MyString ms 
     ,pivot pv 
where REGEXP_SUBSTR (ms.Str,'([[:alnum:]])+',1,pv.pnum) is not null 

結果1

REGEXP_SUBSTR(MS.STR  RNUM  COLNUM 
-------------------- ---------- ---------- 
exapmle123     1   1 
gmail       1   2 
com       1   3 

方法2
如果你知道你會有多少個單詞/列,那麼你可以使用

QUERY2

with MyString as 
(   select '[email protected]' Str, 1 rnum from dual 
) 
SELECT REGEXP_SUBSTR (ms.Str,'([[:alnum:]])+',1,1) col1, REGEXP_SUBSTR (ms.Str,'([[:alnum:]])+',1,2) col2, REGEXP_SUBSTR (ms.Str,'([[:alnum:]])+',1,3) col3 
    FROM MyString ms 

結果2

COL1  COL2 COL 
---------- ----- --- 
exapmle123 gmail com 
+0

非常感謝你@ Ricardo Amold – kumar