使用SELECT替换SQL中的空字符串

时间:2018-08-24 17:45:07

标签: sql sql-server tsql

我正在尝试用一个值替换空字符串,但我似乎找不到最佳的方法。

问题是phone_number列中的 SOME 值的格式没有数字。例如( ) -

我想用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 :(得分:0)

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

答案 1 :(得分:0)

如果您要搜索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