我如何使用PL / SQL删除数字中嵌入的标点符号?

时间:2014-10-08 21:00:15

标签: sql regex oracle

我正在编写一个函数来清理PL / SQL中的地址,并希望删除“/ - ”。从数字中间。我怀疑使用regexp_replace应该很容易。不幸的是,我仍然没有把正常的表情包裹好。

所以我的输入可能看起来像“123-4 Cherry Lane”,我希望它看起来像“123 4 Cherry Lane”但我希望“123 Blake-Habersham”看起来像“123 Blake-Habersham”,没有区别。

由于我想从中学到这些不仅仅是复制和粘贴代码,我也想了解答案。

在伪代码中,我想将所有'[任意字符] [1-9]替换为任意长度,后跟分隔符,[0-9]后跟[任意字符]'替换为'[任何字符] [1- 9]任何长度跟随[任何字符]'

1 个答案:

答案 0 :(得分:1)

select regexp_replace('123-4 Cherry-Lane 123- -123', '(\d+)\D(\d+)', '\1 \2') from dual;  

[至少一位数] [不是数字] [至少一位数] - > [至少一位数] [“空格”] [至少一位数]

如果您确切地知道要替换哪个“非数字”,则可以使用(例如)“[ - 。,@%&]”而不是“\ D”。

或者您可以使用Oracle特殊功能:

regexp_replace('123-4 Cherry-Lane 123- -123', '([[:digit:]]+)[[:punct:]]([[:digit:]]+)', '\1 \2')