从oracle sql中的字符串中删除特殊字符

时间:2017-11-01 18:20:18

标签: sql oracle

该字段包含特殊字符,如pipe,returns,*和( 例如:

Table Name: Employee
Field names: id, name
ID   Name
01   Radhika N (MBA)*MCA*
02   Venu (BBA)
03   (MBA)Ananth
04   Visal **MCA**

现在我想要一个删除所有特殊字符的select语句,我的结果应该是

ID   Name
01  RADHIKA N
02  VENU
03  ANANTH
04  VISHAL

Select id, upper(replace(replace(replace(replace(replace(replace(name,'|',' '),chr(10),' '),chr(13),' '),chr(9),' '), chr(42), ' '), chr(40), ' ')) as NAME
from employee 

这将取出任何ascii特殊字符和* 但结果是:

ID   Name
01  RADHIKA N (MBA) MCA
02  VENU (BBA)
03  (MBA) ANANTH
04  VISHAL MCA

我如何删除"(MBA)"来自名字?

2 个答案:

答案 0 :(得分:3)

对于显示的示例数据,下面的查询将起作用。

select trim(upper(regexp_replace(name,'[\(|\*](.*)[\)|\*]','')))
from tbl

答案 1 :(得分:0)

如果我理解正确,您可以使用regexp_replace()。我会分两步来处理这个问题:

select regexp_replace(regexp_replace(name, '[(][A-Z]+[)]', ''), '[^a-zA-Z ]', '')

第一个删除括号中的部分。第二个只保留字母数字值。