选择案例不按预期工作

时间:2015-12-09 13:26:32

标签: sql sql-server case

我的选择陈述中有这个非常简单的案例

   CASE WHEN PHONENR IS NOT NULL THEN '+46'+PHONENR ELSE ' ' END AS Phone 

我的问题在这里我可以正确地在所有现有数字前面添加国家代码,但是空行的默认值为+46而不是仅为空

3 个答案:

答案 0 :(得分:5)

您可以使用

CASE WHEN PHONENR <> '' THEN '+46'+PHONENR ELSE ' ' END AS Phone 

仅当PHONENR不为空或空字符串时才输入第一个分支。

答案 1 :(得分:4)

使用LEN代替

CASE WHEN LEN(PHONENR)>1 THEN ....

答案 2 :(得分:3)

我建议寻找除了空格之外的值,并将国家/地区代码添加到这些值。像这样:

(case when phonenr like '%[^ ]%' then '+46' + PHONENR 
      else ''
 end)

即,如果电话号码包含非空格字符,则附加国家/地区代码。

您甚至可以更进一步,只在电话号码至少有一位数字时附加国家/地区代码:

(case when phonenr like '%[0-9]%' then '+46' + PHONENR 
      else ''
 end)

让我更进一步。将数据放入数据库时​​,可以使用check约束来验证数据。我建议使用检查约束来验证电话号码的结构 - 例如,它只包含一组字符或NULL值:

alter table add constraint chk_phonenr check (phonenr not like '%[^-0-9()+ ]%' and phonenr like '%[0-9]%')

这将确保该字段具有合理的值或NULL。如果您有此约束,则原始查询将起作用。