我有last_name
列中的数据。oracle正则表达式替换(仅保留a-z)
这些数据来自于在线,有时用户正在复制粘贴word文档中的姓氏。当姓氏有单引号时,这是个问题。不知何故,单词文档中的单引号很奇怪。
我想在我的选择查询中编写一个oracle正则表达式替换,这样它将替换last_name
列中的所有内容,但只保留(a-z或A-Z)。
这是可行的吗?
我有last_name
列中的数据。oracle正则表达式替换(仅保留a-z)
这些数据来自于在线,有时用户正在复制粘贴word文档中的姓氏。当姓氏有单引号时,这是个问题。不知何故,单词文档中的单引号很奇怪。
我想在我的选择查询中编写一个oracle正则表达式替换,这样它将替换last_name
列中的所有内容,但只保留(a-z或A-Z)。
这是可行的吗?
'怪怪'你的意思是它不是正常的单引号? Word有一些默认使用的非常愚蠢的字符(称为'Smart quotes(google)',它看起来有点像标准引号,但是在转换为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
谢谢。我不知道asciistr函数。我不知道它是否是精明的报价,但它在oracle中显示为一个小方块。 – 2010-12-21 21:32:47
可以使用REGEXP_REPLACE运营商如:
select regexp_replace('foobar1000!!!!','[[:cntrl:]]|[[[:digit:]]|[[:punct:]]') from dual;
REGEXP_REPLACE('FOOBAR1000!!!!','[[:CNTRL:]]|[[[:DIGIT:]]|[[:PUNCT:]]')
-----------------------------------------------------------------------
foobar
我喜欢regexp_replace的想法,但这会错过控制字符和空格等..我会去这样的: select regexp_replace('foo Bar1000 !!!!','[^ [:alpha:]] ')从双重; – Craig 2010-12-21 21:48:47
终于我这个去:
REGEXP_REPLACE(mbr_last_name,'[^a-zA-Z'']','') replaced_last_name
我保持a到z A到Z和单引号
值得一看的CONVERT功能,它将做转换n在字符集之间。您可以转换为'纯文本'的7位ASCII字符以消除异常。
例如
选择转换从 ( 'EE', 'US7ASCII')双;
如果姓氏是D'Angelo,会发生什么?你需要小心你的正则表达式。 – 2010-12-21 19:36:21
是的,我想过。现在,我宁愿将它转换为DAngelo。这必须到位,直到我们开始在提交到数据库之前开始捕获它为止。 – 2010-12-21 19:38:15