我正在尝试用一个值替换空字符串,但我似乎找不到最佳的方法。
问题是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_
答案 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