我正在使用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
如何在空值之间没有空格的情况下组合这些项目?请帮忙。感谢
答案 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()
函数而不是+
)。