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

Sybase SQLAnywhere匹配电话号码的格式不同,sql,sybase,sqlanywhere,Sql,Sybase,Sqlanywhere,我有一张带有电话号码varchar字段的桌子。此字段中的电话号码格式多种多样。999-999-9999或(999)999-9999等。我有一个电话号码,我正试图找到它的格式如下:“9999999999”。我想这样做: SELECT … WHERE replace(PHO_PhoneNumber, "[^\\d]", “") = “9999999999” 基本上从字段中删除所有非数字,然后进行比较 是否有这样一个使用regex的函数“replace”,或者当电话号码字段中可能包含许多不同格式的字

我有一张带有电话号码varchar字段的桌子。此字段中的电话号码格式多种多样。999-999-9999或(999)999-9999等。我有一个电话号码,我正试图找到它的格式如下:“9999999999”。我想这样做:

SELECT …
WHERE replace(PHO_PhoneNumber, "[^\\d]", “") = “9999999999”
基本上从字段中删除所有非数字,然后进行比较

是否有这样一个使用regex的函数“replace”,或者当电话号码字段中可能包含许多不同格式的字符时,是否有更好的方法来查找此号码?我无法控制如何将电话号码输入此表

谢谢


沃伦

我认为Sybase没有这样的功能。你可以写一个。但是,电话号码中的“特殊”字符通常为:“()+-”。您可以对以下各项使用多个替换:

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

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

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

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

我认为它是版本11。单引号之间的所有内容都是纯正则表达式吗?几乎不需要特殊的转义,尽管几乎任何两个regexp实现之间似乎总是有细微的语法差异。v11文档在这里