Sybase SQLAnywhere匹配的电话号码格式不同

时间:2016-01-25 02:01:37

标签: sql sybase sqlanywhere

我有一个带有电话号码varchar字段的表。此字段具有以多种不同方式格式化的电话号码。 999-999-9999或(999)999-9999等。我有一个我想要找到的电话号码,其格式如下:“9999999999”。我想做这样的事情:

SELECT …
WHERE replace(PHO_PhoneNumber, "[^\\d]", “") = “9999999999”

基本上从字段中删除所有非数字,然后进行比较。

是否存在使用正则表达式的“替换”功能,或者当电话号码字段中包含许多不同的格式字符时,是否有更好的方法来尝试查找此号码?我无法控制如何将电话号码输入此表格。

谢谢,

沃伦

2 个答案:

答案 0 :(得分:1)

我不认为Sybase有这样的功能。你可以写一个。然而,"特别"电话号码中的字符通常为:"()+ - "。您可以使用多个替换:

WHERE replace(replace(replace(replace(replace(PHO_PhoneNumber, ' ', ''), ')', ''), '(', ''), '+', ''), '-', '') = '9999999999'

答案 1 :(得分:1)

您没有说明您正在使用的SQL Anywhere版本,但是从版本11.0开始,SQL Anywhere在where子句中支持REGEXP运算符,因此您可以执行以下操作:

select ...
where PHO_PhoneNumber regexp '\(?\d{3}\)?-?\d{3}-?\d{4}'

免责声明:我在SQL Anywhere工程中为SAP工作。