Замена пустой строки в SQL с помощью SELECT - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь заменить пустые строки значением, и я не могу найти лучший способ сделать это.

Проблема заключается в том, что НЕКОТОРЫЕ значения в столбце phone_number имеют формат без чисел. Например ( ) -

Я хочу заменить эти пустые значения на 000-0000. Я пытался использовать функцию CASE WHEN, но это не решает проблему. COALESCE IFNULL не будет работать, потому что технически значения не равны NULL, а являются неполными. Я думаю, что, возможно, функция CASE WHEN сработает, если я смогу понять, как правильно форматировать пустые значения.

Вот пример кода

SELECT 
    phone_column,
    CASE 
       WHEN phone_column = '() -' 
          THEN '000-000' 
          ELSE SUBSTRING(phone_colum, 6, 8)
    END AS Phone
FROM 
    client_table
ORDER BY 
    linkid_

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Если вы хотите искать в varchar, используйте LIKE, это поможет вам в использовании выражений.Например, в вашем случае phone_column = '() -' будет phone_column LIKE '() -%', это будет соответствовать любой строке, которая начинается с () -.если вы сделаете phone_column = '() -', тогда она будет соответствовать только той же самой строке.

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

Я приведу вам пример: для проверки телефонных номеров вы сначала удалите все существующие форматы (круглые скобки, тире, пробелы), а затем получите целое число из 10 или 7 цифр.зависит от вашего способа хранения телефонных номеров.любые числа меньше этого будут недействительными.

Чтобы удалить форматы:

SELECT REPLACE(REPLACE(REPLACE(REPLACE(Number,'(',''),')',''),'-',''),' ','')

Теперь у вас будут только цифры, с которыми будет легче работать.

Примерно так:

SELECT 
    phone_column
FROM (SELECT REPLACE(REPLACE(REPLACE(REPLACE(phone_column,'(',''),')',''),'-',''),' ','') phone_column FROM client_table) D

PS: номера телефонов некоторых стран начинаются с 0, если ваши номера не начинаются с 0, то вы переводите номер в BIGINT,который удалит все начальные нули.

Теперь вы можете использовать регистр для проверки чисел и делать с ними все что угодно.

SELECT 
    CASE 
        WHEN LEN(phone_column) = 10 
        THEN '(' + SUBSTRING(phone_column,1,3) + ') ' + SUBSTRING(phone_column, 3,3) + '-' + SUBSTRING(phone_column, 6,4) 
        ELSE '(000) 000-0000' 
    END Phone
FROM (SELECT REPLACE(REPLACE(REPLACE(REPLACE(phone_column,'(',''),')',''),'-',''),' ','') phone_column FROM client_table) D
0 голосов
/ 24 августа 2018
declare @test table(ph varchar(20))

insert into @test 
select '( ) -'
UNION
select ''
UNION
select '(123)-456-7890'

select case 
           when replace(ph,'( ) -','')='' then '000-000' 
           else substring(ph,6,8) 
        end 
from @test
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...