正则表达式删除<>来自专栏

时间:2016-02-18 18:14:45

标签: regex oracle oracle-sqldeveloper

我有一个名称和电子邮件ID的列,如

Column A 

ABX <ABX@gmail.com>
hfgfg <shantanu @gmail.com>

我想使用正则表达式只检索名称并排除&lt;&gt;以及来自上一栏的电子邮件ID。

SQL查询中的正则表达式。

我试过

SELECT REPLACE('s <abc@gmail.com>', SUBSTR('s <abc@gmail.com>', instr('(', 's <abc@gmail.com>'), LENGTH('s <abc@gmail.com>') - instr(')', reverse('s <abc@gmail.com>')) - instr('(', 's <abc@gmail.com>') + 2), '')
FROM dual;

2 个答案:

答案 0 :(得分:1)

你可以使用正则表达式;要么从第一个开口角支架上移除所有东西,也可以选择修剪任何剩余的空间:

select rtrim(regexp_substr('s <abc@gmail.com>', '[^<]*'), ' ') as name from dual;

或者使用null:

替换尖括号及其中的任何内容以及任何前一个空格
select regexp_replace('s <abc@gmail.com>', '\s?<.*>', null) as name from dual;

使用一些示例数据:

with your_table(column_a) as (
  select 'Some Name <some.name@example.com>' from dual
  union all select 'SingleName <single@example.com>' from dual
)
select column_a,
  rtrim(regexp_substr(column_a, '[^<]*'), ' ') as name1,
  regexp_replace(column_a, '\s?<.*>', null) as name2
from your_table;

COLUMN_A                          NAME1           NAME2         
--------------------------------- --------------- ---------------
Some Name <some.name@example.com> Some Name       Some Name      
SingleName <single@example.com>   SingleName      SingleName     

如果您还想要电子邮件地址,可以使用:

select regexp_substr('s <abc@gmail.com>', '([^<>]*)', 1, 3) as email from dual;

......虽然可能有更好的方法。同样嘲笑:

with your_table(column_a) as (
  select 'Some Name <some.name@example.com>' from dual
  union all select 'SingleName <single@example.com>' from dual
)
select column_a,
  rtrim(regexp_substr(column_a, '[^<]*'), ' ') as name1,
  regexp_replace(column_a, '\s?<.*>', null) as name2,
  regexp_substr(column_a, '([^<>]*)', 1, 3) as email
from your_table;

COLUMN_A                          NAME1      NAME2      EMAIL               
--------------------------------- ---------- ---------- ---------------------
Some Name <some.name@example.com> Some Name  Some Name  some.name@example.com
SingleName <single@example.com>   SingleName SingleName single@example.com   

答案 1 :(得分:-1)

为什么不尝试这样的事情:

UPDATE table SET A=TRIM(SUBSTRING(A, 1, INSTR(A,'<')));