SQL-запрос для устранения проблемы с номером телефона в таблице - PullRequest
4 голосов
/ 05 августа 2011

У меня есть таблица, которая содержит столбец номера телефона. Нет ограничений по вводу телефонных номеров. В настоящее время номера телефонов представлены в следующем формате

123-456-7890
(123)-456-7890
1234567890

Я хотел бы обновить таблицу и привести все номера телефонов в формате 123-456-7890. У меня более 20 тысяч записей. Могу ли я сделать это с помощью SQL Query или мне нужно использовать регулярные выражения в ASP или PHP?

Редактировать: Примечание лучший ответ - для измененного вопроса, номер телефона (123) -456-78790 изменен на (123) 456-7890

Ответы [ 7 ]

7 голосов
/ 05 августа 2011

Если они строго в одном из этих трех форматов, вы можете сделать это в SQL достаточно просто, используя SUBSTRING и проверяя LEN каждого элемента.

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

Изменить, чтобы добавить:

Учитывая ваш комментарий, что это будут только эти 3 формата, вы можете сделать это:

declare @t table (x varchar(20))
insert into @t 
select '123-456-7890'
union select '(123)456-7890'
union select '1234567890'

select 
    case 
      when len(x) = 10 then 
        substring(x, 1, 3) + '-' + substring(x, 4, 3) + '-' + substring(x, 7, 4)
      when len(x) = 13 then
        substring(x, 2, 3) + '-' + substring(x, 6, 8)
      else x
    end
from @t
2 голосов
/ 05 августа 2011

Это будет работать:

Сначала замените скобки и дефисы, затем добавьте их обратно.

DECLARE @Number varchar(25)
SELECT @Number = '(123)-456-7890'

SELECT SUBSTRING(REPLACE(REPLACE(REPLACE(@Number, '(', ''), ')', ''), '-', ''), 1, 3) 
    + '-' 
    + SUBSTRING(REPLACE(REPLACE(REPLACE(@Number, '(', ''), ')', ''), '-', ''), 4, 3)  
    + '-' 
    + SUBSTRING(REPLACE(REPLACE(REPLACE(@Number, '(', ''), ')', ''), '-', ''), 7, 4)  

Примечание Вы можете создать скалярную функцию для замены всех дефисов и скобок ... Это было бы более читабельно, чем:

DECLARE @Number varchar(25)
SELECT @Number = '(123)-456-7890'

SELECT SUBSTRING(StripCharacters(@Number), 1, 3) 
    + '-' 
    + SUBSTRING(StripCharacters(@Number), 4, 3)  
    + '-' 
    + SUBSTRING(StripCharacters(@Number), 7, 4) 
1 голос
/ 05 августа 2011

Краткое и без временных таблиц:

UPDATE Phones 
 SET phone = 
SUBSTRING(REPLACE(REPLACE(REPLACE(phone,'-',''),')',''),'(',''),1,3) + '-'
+ SUBSTRING(REPLACE(REPLACE(REPLACE(phone,'-',''),')',''),'(',''),4,3) + '-'
+ SUBSTRING(REPLACE(REPLACE(REPLACE(phone,'-',''),')',''),'(',''),7,4)
1 голос
/ 05 августа 2011

Вот отличный пример : Показывает, как создавать пользовательские функции, пользовательские функции форматирования телефонных номеров в TSQL

0 голосов
/ 05 августа 2011

Посмотрите на этот быстрый пример:

CREATE TABLE #temp
(
  phonenumber VARCHAR(15)
)

INSERT INTO #temp 
        ( phonenumber )
VALUES  ( '555-578-5899'

 INSERT INTO    #temp
            ( phonenumber )
 VALUES  ( '(555)-896-3269'  )

INSERT INTO #temp
        ( phonenumber )
VALUES  ( '123-456-2129')


update #temp
set phonenumber=replace(phonenumber,'(','')
update #temp
set phonenumber=replace(phonenumber,')','')
update #temp
set phonenumber=replace(phonenumber,'-','')

 -- That will eliminate all (,- and ) from the table

update #temp
set phonenumber=left(phonenumber,3)+'-'+substring(phonenumber,4,3)
+'-'+right(phonenumber,4) 

 SELECT * FROM #temp

 DROP TABLE #temp
0 голосов
/ 05 августа 2011

Если у вас есть только 20 тыс. Записей, просто делайте то, что вам проще.Лично я бы вытащил все данные и затем снова вставил их, используя язык на стороне сервера.PHP, ASP или SQL на самом деле не имеет значения, если это одноразовая вещь.Просто убедитесь, что вы установили некоторые ограничения на форматирование для новых вставок.

0 голосов
/ 05 августа 2011

Я бы загрузил каждый номер телефона и удалил их.

Так что удалите все точки, запятые, дефисы, - в основном все, что не является числом.

Затем вставьте их в форматевы ищете.

вы можете сделать это с помощью запроса или языка сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...