0

我有一些电话号码的例子,如下所示:

0810-093-485-58
0811.4845.5677
0812 567 6788 2
08138475967079/0813845765998
0814749345875 NEW
64739845985
0815756867967 (G) / 022 845 769
00816956865090
0817637698578

我尝试使用replace和regexp,如下:

select replace (number, '','') as phone_number
from details
where number not regexp '[[:punct:] A-Za-z]' and number not regexp '^ [1-9]'

这些语法仅适用于结果:

0817637698578

我的意思是我想清理那些标点符号、空格和包含的字母:

081009348558
081148455677
08125676788 2
08138475967079
0814749345875
0815756867967
0816956865090
0817637698578

因此,结果不仅是一个,而是所有电话号码,只是非数字被清除。语法呢?请帮忙。谢谢你。

4

2 回答 2

1

您的where子句排除了所有包含字母、空格或标点符号的数字,因此无论如何您将看到的都是格式正确的数字。也不replace (number, '','')会对字符串进行任何更改。

没有正则表达式replace函数就没有很好的方法可以做到这一点,正则表达式函数可用作用户定义的函数,但不是本机函数。看PREG_REPLACE这里

于 2012-05-10T17:00:08.960 回答
1

为什么不在发布到数据库的代码中这样做呢?regexp 在大多数语言中比在 SQL 中要容易得多,而且您还有一个额外的好处,那就是不会在数据库服务器上增加更多负载。

粗略的对这个问题没有帮助。您是否考虑过使用用户定义的函数?例如这个包https://launchpad.net/mysql-udf-regexp

于 2012-05-10T17:04:59.197 回答