SQL Server:连接值并忽略空值或空值

时间:2017-01-21 15:09:23

标签: sql sql-server tsql null concatenation

我正在使用SQL Server 2014,我有一个包含地址列表的表,其中的项目位于不同的列中。

例如:

st number Prefix  st name    suffix   Dir    unit    number    city    zip
___________________________________________________________________________
1234       W       Main       St      NULL   Unit     34        LA     90210
345       NULL     George     Ave     NULL   NULL     NULL      SF     94525
123        E       Bloom      Ct       W     NULL     NULL      DC     99342

我想连接这些地址并将它们组合成一个单独的单元格。

主要目标是使用该连接地址链接到另一个表。例如,如果我使用ISNULL连接忽略空白值,它将给我这个

345 _ George Ave _ _ _ SF 94525. 

(我添加了_以显示空间的使用位置)

当存在空值时,它会添加一个空格。如果有空格,则指向另一个表的链接将不起作用。我试过了COALESCE,但它没有用。我对Coalesce不太熟悉,但我认为COALESCE只会给我第一个非空值。我想要的结果是:

1234 W Main St Unit 34 LA 90210
345 George Ave SF 94525
123 E bloom Ct W DC 99342

如何在空值之间没有空格的情况下组合这些项目?请帮忙。感谢

2 个答案:

答案 0 :(得分:3)

基于Prdp的回答,一个简单的替换(或两个)可以消除双/三空格。

Declare @YourTable table ([st number] varchar(25),Prefix varchar(25),[st name] varchar(25),suffix varchar(25),Dir varchar(25),unit varchar(25),number varchar(25),city varchar(25),zip varchar(25))
Insert Into @YourTable values
('1234','W' ,'Main'  ,'St' ,NULL,'Unit','34','LA','90210'),
('345' ,NULL,'George','Ave',NULL,NULL  ,NULL,'SF','94525'),
('123' ,'E' ,'Bloom' ,'Ct' ,'W' ,NULL  ,NULL,'DC','99342')

Select FullAddress = replace(replace(concat([st number],' ',Prefix,' ',[st name],' ',suffix,' ',Dir,' ',unit,' ',number,' ',city,' ',zip),'   ',' '),'  ',' ')
 From  @YourTable A

返回

FullAddress
1234 W Main St Unit 34 LA 90210
345 George Ave SF 94525
123 E Bloom Ct W DC 99342

答案 1 :(得分:2)

你可以这样做:

select (coalesce(st_number + ' ', '') +
        coalesce(prefix + ' ', '') +
        coalesce(st_name + ' ', '') +
        . . .
       )

在字符串的末尾留下剩余的空格。您可以使用rtrim()删除它。

select rtrim(coalesce(st_number + ' ', '') +
             coalesce(prefix + ' ', '') +
             coalesce(st_name + ' ', '') +
             . . .
            )

正如Prdp所指出的,这假设列实际上是字符串。否则,这些列将需要显式转换(或者您可以使用concat()函数而不是+)。

相关问题