Sybase SQLAnywhere 匹配 phone 不同格式的数字
Sybase SQLAnywhere matching phone numbers formatted different ways
我有一个 table 和一个 phone number varchar 字段。该字段有 phone 个数字,这些数字采用多种不同的格式。 999-999-9999 或 (999) 999-9999 等等。我有一个 phone 号码,我试图找到它的格式如下:“9999999999”。我想做这样的事情:
SELECT …
WHERE replace(PHO_PhoneNumber, "[^\d]", “") = “9999999999”
基本上从字段中删除所有非数字,然后进行比较。
是否有使用正则表达式的 "replace" 函数,或者当 phone 数字字段中可以包含许多不同的格式字符时,是否有更好的方法来尝试查找此数字?我无法控制 phone 数字如何输入此 table。
谢谢,
沃伦
我不认为Sybase有这样的功能。你可以写一个。但是,phone 数字中的 "special" 字符通常为:“()+-”。您可以对这些使用多个替换:
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}'
免责声明:我在 SAP 工作,从事 SQL Anywhere 工程。
我有一个 table 和一个 phone number varchar 字段。该字段有 phone 个数字,这些数字采用多种不同的格式。 999-999-9999 或 (999) 999-9999 等等。我有一个 phone 号码,我试图找到它的格式如下:“9999999999”。我想做这样的事情:
SELECT …
WHERE replace(PHO_PhoneNumber, "[^\d]", “") = “9999999999”
基本上从字段中删除所有非数字,然后进行比较。
是否有使用正则表达式的 "replace" 函数,或者当 phone 数字字段中可以包含许多不同的格式字符时,是否有更好的方法来尝试查找此数字?我无法控制 phone 数字如何输入此 table。
谢谢,
沃伦
我不认为Sybase有这样的功能。你可以写一个。但是,phone 数字中的 "special" 字符通常为:“()+-”。您可以对这些使用多个替换:
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}'
免责声明:我在 SAP 工作,从事 SQL Anywhere 工程。