如何使用COALESCE()添加其他字符

时间:2012-10-19 13:26:27

标签: sql coalesce

我的SELECT语句有以下语法:

CONCAT(first_name, " ", COALESCE(middle_initial), " ", last_name) AS full_name

显然,我得到的是以下内容:

For first_name='John' and middle_initial='A.' and last_name='Smith' 
I get 'John A. Smith'

这很好,是理想的结果。

但是我为以下数据获得了额外的空间(我清楚地理解为什么):

For first_name='John' and middle_initial='' and last_name='Smith' 
I get 'John  Smith'

如果条件返回非空值,是否有COALESCE()追加“”的方法?

谢谢。

4 个答案:

答案 0 :(得分:3)

当middle_initial有''时,你会想:

SELECT CONCAT(first_name, ' ', 
   CASE
      WHEN middle_initial is null OR middle_initial = '' then ''
      ELSE CONCAT(middle_initial, ' ')
   END
   , last_name) AS full_name

SQLFiddle Example

COALESCE用于检查NULL值,而不是处理空字符串,''

答案 1 :(得分:2)

select concat(first_name , ' ' , 
     case when middle_initial is null then ''
          when middle_initial = '' then ''
          else concat(middle_initial, ' ') end ,
     last_name)

此查询假设first_name和last_name不为null也不是空字符串,在这种情况下,您可以将相同的逻辑应用于该字段

答案 2 :(得分:1)

试试这个

SELECT rtrim(Coalesce(first_name + ' ','') 
        + Coalesce(nullif(middle_name,'') + ' ', '') 
        + Coalesce(nullif(last_name,'') + ' ', ''))
FROM @table


SELECT rtrim(Coalesce('John' + ' ','') 
        + Coalesce(nullif('A.','') + ' ', '') 
        + Coalesce(nullif('Smith','') + ' ', ''))

SELECT rtrim(Coalesce('John' + ' ','') 
        + Coalesce(nullif('','') + ' ', '') 
        + Coalesce(nullif('Smith','') + ' ', ''))

答案 3 :(得分:1)

我认为最好的办法就是这样做。您可以对任意数量的字段,变量等使用此类构造。此外,它会正确显示JohnJohn A.

declare @Temp_Table table (first_name nvarchar(128), middle_initial nvarchar(128), last_name nvarchar(128))

insert into @Temp_Table
select 'John', null, 'Smith' union all
select 'John', 'A.', 'Smith' union all
select 'John', 'A.', null union all
select 'John', null, null

select
    *,
    stuff
    (
        isnull(' ' + nullif(first_name, ''), '') +
        isnull(' ' + nullif(middle_initial, ''), '') +
        isnull(' ' + nullif(last_name, ''), ''),
        1, 1, ''
    )
from @Temp_Table