我有一些关于电话号码的例子,如下所示:
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
因此,结果不仅是一个,而且所有的电话号码,只是非数字正在被清除。 语法怎么样?请帮忙。谢谢。
答案 0 :(得分:1)
您的where
子句排除了包含字母,空格或标点符号的所有数字,因此您将看到的所有数字都是格式正确的数字。此外,replace (number, '','')
也不会对字符串进行任何更改。
如果没有正则表达式replace
函数,没有很好的方法可以做到这一点,它可以作为用户定义的函数使用,但不能作为本机函数使用。请看PREG_REPLACE
here。
答案 1 :(得分:1)
为什么不在发布到数据库的代码中执行此操作?在大多数语言中,regexp比在SQL中容易得多,并且您还可以在数据库服务器上不添加更多负载。
那粗糙对你没有帮助。您是否考虑过使用用户定义函数?比如这个包https://launchpad.net/mysql-udf-regexp?