oracle正则表达式替换(仅保留a-z)

时间:2010-12-21 19:35:12

标签: regex oracle

我在last_name列中有数据。

此数据来自在线,有时用户会复制粘贴word文档中的姓氏。当姓氏具有单引号时,这是一个问题。不知何故单词文档中的单引号很奇怪。

我想在我的选择查询中编写一个oracle正则表达式替换,以便它替换last_name列中的所有内容,但只保留(a-z或A-Z)。

这可行吗?

4 个答案:

答案 0 :(得分:12)

最后我接受了这个:

REGEXP_REPLACE(mbr_last_name,'[^a-zA-Z'']','') replaced_last_name 

我保持a到z A到Z和单引号

答案 1 :(得分:2)

'怪异'你的意思是它不是正常的单引号吗? Word默认使用一些非常愚蠢的字符(称为“Smart quotes(google)”。它看起来有点像标准引号,但在转换为ASCII和从ASCII转换时具有不同的行为,例如UTF-8

要在SQL中识别它们,请使用函数ASCIISTR进行选择,并查找<backslash><4 digits>形式的子字符串(这适用于带有UTF-8和simialr字符的数据库,我不确定它是什么使用ASCII NLS参数在数据库中返回)

select asciistr(COLUMN) from table

我在最近的一些工作中使用了以下代码删除它们

update jiraissue
set summary = replace(asciistr(summary), '\2013','-')
where asciistr(summary) like '%\2013%';`)

HTH

答案 2 :(得分:1)

例如,您可以使用regexp_replace运算符:

select regexp_replace('foobar1000!!!!','[[:cntrl:]]|[[[:digit:]]|[[:punct:]]') from dual;

REGEXP_REPLACE('FOOBAR1000!!!!','[[:CNTRL:]]|[[[:DIGIT:]]|[[:PUNCT:]]') 
----------------------------------------------------------------------- 
foobar   

答案 3 :(得分:0)

值得查看CONVERT函数,它将在字符集之间进行转换。您可以转换为“普通”7位ASCII字符以删除异常。

例如

  

从中选择转换('êê','US7ASCII')   双