2016-01-25 10 views
1

У меня есть таблица с номером телефона varchar. В этом поле есть номера телефонов, отформатированные по-разному. 999-999-9999 или (999) 999-9999 и т. Д. У меня есть номер телефона, который я пытаюсь найти, который отформатирован следующим образом: «9999999999». Я хотел бы сделать что-то вроде этого:Sybase SQLAnywhere, соответствующие номерам телефонов, отформатированным разными способами

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

В основном удалить все не цифры на поле, а затем сравнить.

Есть ли такая функция «заменить», которая использует регулярное выражение, или есть лучший способ найти этот номер, когда в поле номера телефона может быть много разных символов форматирования? Я не могу контролировать, как номера телефонов вводятся в эту таблицу.

Спасибо,

Уоррен

ответ

1

Вы не можете сказать, какая версия SQL Anywhere вы используете, но в версии 11.0, SQL Anywhere поддерживает оператор REGEXP в ИНЕКЕ, так что вы могли бы сделать что-то вроде:

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

Отказ от ответственности: Я работаю для SAP в SQL Anywhere инженерии.

+0

Я думаю, что это версия 11. Все ли между одинарными кавычками просто прямое регулярное выражение? Никакого специального ухода не нужно? – Warren

+0

Довольно много, хотя кажется, что всегда есть небольшие различия в синтаксисе между почти любыми двумя реализациями регулярных выражений. Документы v11 находятся здесь http://dcx.sap.com/index.html#1101/en/dbreference_en11/regexp-search-condition.html –

1

Я не думаю, что Sybase имеет такую ​​функцию. Вы можете написать один. Однако «специальные» символы в телефонных номерах обычно: «() + -». Вы можете использовать несколько Заменяет для них:

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