Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Привести телефонные номера к единому формату  [new]
nicreg
Member

Откуда:
Сообщений: 11
Здравствуйте уважаемые форумчане!
Помогите составить запрос.
Существует таблица, со следующими столбцами:
id - int
phone - varchar

idphone
1 989161112233
2 984445566
3 98915111223344
4 98915111223344#00

Необходимо получить
idphone
1 89161112233
2 84954445566
3 89151112233
4 89151112233

Т.е. привести телефонные номера к 11-значному формату.
Просмотрел форум, похожей темы не нашел, если она существует, прошу дать ссылку
Заранее благодарю!
30 янв 12, 21:19    [11999538]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А телефон 01 как привести к 11-значному формату? А 1029?
30 янв 12, 21:22    [11999549]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
nicreg
Member

Откуда:
Сообщений: 11
Гавриленко Сергей Алексеевич
А телефон 01 как привести к 11-значному формату? А 1029?

все номера < 7 не попадают в выборку
30 янв 12, 21:25    [11999570]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Мог бы и пояснить русскими словами.
Хотя бы на примере второго телефона.
30 янв 12, 21:25    [11999572]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
nicreg
Т.е. привести телефонные номера к 11-значному формату.
Вы для начала напишите алгоритм преобразования произвольной строки, русским языком. Допустим, для номера 123456789876554321

А запрос написать - самое простое.
30 янв 12, 21:32    [11999625]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
nicreg
Member

Откуда:
Сообщений: 11
Немного пояснений:
Все телефоны начинаются с цифры '9', ее надо обрезать, если телефон имеет 9 знаков '98' их тоже обрезать и добавить '8495'
На примере второго телефона:
имеем: 984445566, необходимо отрезать '98' и добавить '8495', получаем 84954445566
Также нужно отрезать справа лишние цифры, либо символы:
На примере четвертого телефона:
имеем: 98915111223344#00, необходимо отрезать '9', и '44#00', получаем 89151112233

Как это сделать в одном запросе ума не приложу....
30 янв 12, 21:35    [11999639]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31981
nicreg
Немного пояснений:
Все телефоны начинаются с цифры '9', ее надо обрезать, если телефон имеет 9 знаков '98' их тоже обрезать и добавить '8495'
На примере второго телефона:
имеем: 984445566, необходимо отрезать '98' и добавить '8495', получаем 84954445566
Также нужно отрезать справа лишние цифры, либо символы:
На примере четвертого телефона:
имеем: 98915111223344#00, необходимо отрезать '9', и '44#00', получаем 89151112233

Как это сделать в одном запросе ума не приложу....
То есть нужно огтрезать первый символ, если второй символ 8, заменить его на 495, и обрезать результат?

select right(case when substring(F, 2, 1) = '8' then '495' else substring(F, 2, 1) end + substring(F, 3, 100), 11)
from table
30 янв 12, 22:25    [11999842]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
nicreg
Member

Откуда:
Сообщений: 11
alexeyvg
nicreg
Немного пояснений:
Все телефоны начинаются с цифры '9', ее надо обрезать, если телефон имеет 9 знаков '98' их тоже обрезать и добавить '8495'
На примере второго телефона:
имеем: 984445566, необходимо отрезать '98' и добавить '8495', получаем 84954445566
Также нужно отрезать справа лишние цифры, либо символы:
На примере четвертого телефона:
имеем: 98915111223344#00, необходимо отрезать '9', и '44#00', получаем 89151112233

Как это сделать в одном запросе ума не приложу....
То есть нужно огтрезать первый символ, если второй символ 8, заменить его на 495, и обрезать результат?

select right(case when substring(F, 2, 1) = '8' then '495' else substring(F, 2, 1) end + substring(F, 3, 100), 11)
from table

да спасибо, только заменить на 8495,
right(case when substring([Phone], 1, 1) = '9' then '8495' end + substring([Phone], 2, 100), 11)
30 янв 12, 23:01    [11999949]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
nicreg
Member

Откуда:
Сообщений: 11
nicreg
alexeyvg
пропущено...
То есть нужно огтрезать первый символ, если второй символ 8, заменить его на 495, и обрезать результат?

select right(case when substring(F, 2, 1) = '8' then '495' else substring(F, 2, 1) end + substring(F, 3, 100), 11)
from table

да спасибо, только заменить на 8495,
right(case when substring([Phone], 1, 1) = '9' then '8495' end + substring([Phone], 2, 100), 11)


Не подскажите, как из этого запроса убрать все значения <> 11?
30 янв 12, 23:13    [11999970]     Ответить | Цитировать Сообщить модератору
 Re: Привести телефонные номера к единому формату  [new]
nicreg
Member

Откуда:
Сообщений: 11
alexeyvg, спасибо вам за помощь!
31 янв 12, 02:02    [12000387]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить