Regex 删除正则表达式<&燃气轮机;从列

Regex 删除正则表达式<&燃气轮机;从列,regex,oracle,oracle-sqldeveloper,Regex,Oracle,Oracle Sqldeveloper,我有一个列的名称和电子邮件id像 Column A ABX <ABX@gmail.com> hfgfg <shantanu @gmail.com> A列 ABX hfgfg 我想使用正则表达式仅检索名称,并从上述列中排除电子邮件IDF SQL查询中的正则表达式 我试过了 SELECT REPLACE('s <abc@gmail.com>', SUBSTR('s <abc@gmail.com>', instr('(', 's <abc@

我有一个列的名称和电子邮件id像

Column A 

ABX <ABX@gmail.com>
hfgfg <shantanu @gmail.com>
A列
ABX
hfgfg
我想使用正则表达式仅检索名称,并从上述列中排除电子邮件IDF

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;
选择替换('s',SUBSTR('s','s'),instr('('s','s'),LENGTH('s')-instr('s')),reverse('s'))-instr('('s','s')+2),'
来自双重;

为什么不试试这样的方法:

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

updatetable SET A=TRIM(子字符串(A,1,INSTR(A),您可以使用正则表达式;或者从第一个打开的角括号中删除所有内容,也可以选择修剪任何剩余的空格:

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

选择rtrim(regexp\u substr('s'),'[^不清楚您是否要排除尖括号,或者那些和电子邮件地址。这相当简单-您尝试了什么,遇到了什么问题?@AlexPoole-感谢您的更正我已经添加了我的查询并编辑了问题。如果您在oracle中发现它有效,请进行投票?Ops!谢谢您的评论,您应该这样做看看INSTR函数。我编辑了这篇文章。它应该是SUBSTR而不是SUBSTRING;这将包括开头的尖括号。@JonathanRotge-谢谢..但这不起作用..这将只替换>我想从专栏中删除电子邮件地址谢谢。这起作用了。有没有办法获取电子邮件地址并提取其中的字符串括号由regex?@divya.trehan573从本专栏中删除-我添加了一种方法。
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