从列中删除 <> 的正则表达式

Regex to remove <> from column

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

Column A 

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

我想使用正则表达式来仅检索名称并从上面的列中排除 <> 和电子邮件 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;

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

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

你可以使用正则表达式;要么从第一个左尖括号中删除所有内容,也可以选择修剪任何剩余的空格:

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