Я очень надеюсь, что вы имеете дело только с номерами в США (предположительно из вашего примера).Как только вы начинаете выходить на международный уровень, все становится сложнее.Я также надеюсь, что вариации - это только те два, которые вы сказали ... SQL не очень хорош в этом, но здесь все идет.
EDIT Запрос SQLite, как и было запрошено.Я использовал документацию SQLite, в частности основные функции http://www.sqlite.org/lang_corefunc.html и операторы выбора http://sqlite.org/lang_select.html.
select SUBSTR(Phone, 1, 3) + '-' +
SUBSTR(PHONE, 4, 3) + '-' +
SUBSTR(PHONE, 7, 4)
from (
select REPLACE(REPLACE(REPLACE(REPLACE(Phone, '-', ''), '(', ''), ')', ''), ' ', '') Phone
from source
) xx
Мои оригинальные запросы работают в MS SQL.
select SUBSTRING(Phone, 1, 3) + '-' +
SUBSTRING(PHONE, 4, 3) + '-' +
SUBSTRING(PHONE, 7, 4)
from source
where CHARINDEX(Phone, '-') = 0
Вы можете рассмотретьочистка всех телефонных номеров в первую очередь.Например:
select SUBSTRING(Phone, 1, 3) + '-' +
SUBSTRING(PHONE, 4, 3) + '-' +
SUBSTRING(PHONE, 7, 4)
from (
select REPLACE(REPLACE(REPLACE(REPLACE(Phone, '-', ''), '(', ''), ')', ''), ' ', '') Phone
from source
) xx
Номера телефонов могут быть до смешного сложными.Например, я пропустил периоды в этой уборке.Я настоятельно рекомендую очистить их в другом коде, кроме T-SQL.