1

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()条件がnull以外の値を返す場合、「」を追加する方法はありますか?

ありがとうございました。

4

4 に答える 4

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 でも空の文字列でもないことを前提としています。その場合、そのフィールドに同じロジックを適用できます。

于 2012-10-19T13:41:02.963 に答える
1

このようにするのが最善の方法だと思います。このような構造は、任意の数のフィールド、変数などに使用できます。Johnまた、正しく表示されますJohn 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
于 2012-10-19T13:58:01.077 に答える
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','') + ' ', ''))
于 2012-10-19T13:55:59.957 に答える