这里我已经编写了代码,但也包含了特殊字符。但是我的要求是要求用户动态发送电子邮件,并在发生特殊字符时拆分该电子邮件,但需要输出特殊字符。
col1 col2 col3
------------------
example123 gmail com
select substr('exapmle123@gmail.com',instr('example123@gmail.com','@'),instr('example123@gmail.com','.')) as col1 ,
substr('exapmle123@gmail.com',1,instr('example123@gmail.com','@')) as col2,
substr('exapmle123@gmail.com',instr('example123@gmail.com','.'),length('example123@gmail.com')) as col3
from dual;
答案 0 :(得分:1)
我建议您使用REGEXP_SUBSTR分割字符串
方法1
在下面的示例中,每个新单词和行都有一行,而colnumber是结果集的一部分。我建议你使用这种方法,因为你事先无法知道单词/ colummns的数量
<强>查询1 强>
with MyString as
( select 'exapmle123@gmail.com' 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 'exapmle123@gmail.com' 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