使用正则表达式格式化电子邮件ID字符串

时间:2015-02-17 01:13:19

标签: plsql oracle10g

我有一个包含电子邮件地址的字符串,例如

,abc@gmail.com, pqr@gmail.com, 123@gmail.com,

abc@gmail.com,, pqr@gmail.com, 123@gmail.com,xyz@gmail.com,

我希望out out是

abc@gmail.com,pqr@gmail.com,123@gmail.com
abc@gmail.com,pqr@gmail.com,123@gmail.com,xyz@gmail.com

我尝试了很多选项,但无法获得所需的结果......有时会使用双逗号,在字符串的开头和结尾处使用逗号。

这可以使用regexp在单个sql语句中实现吗?

我正在使用Oracle 10g。

2 个答案:

答案 0 :(得分:1)

with testdata as
  (select ',abc@gmail.com, pqr@gmail.com, 123@gmail.com,' as e from dual
   union all
   select 'abc@gmail.com,, pqr@gmail.com, 123@gmail.com,xyz@gmail.com,' from dual)
select TRIM(',' FROM REPLACE(REPLACE(e,' '),',,',','))
from testdata;

abc@gmail.com,pqr@gmail.com,123@gmail.com
abc@gmail.com,pqr@gmail.com,123@gmail.com,xyz@gmail.com

答案 1 :(得分:0)

- 使用正则表达式,我们可以这样做。

WITH testdata AS
  (SELECT ',abc@gmail.com, pqr@gmail.com, 123@gmail.com,' AS e FROM dual
  UNION ALL
  SELECT 'abc@gmail.com,, pqr@gmail.com, 123@gmail.com,xyz@gmail.com,'
  FROM dual
  )
SELECT trim(','
FROM regexp_replace((regexp_replace(e,',|[[:space:]]',NULL)),'gmail.com','gmail.com,'))
FROM testdata
相关问题