我有地址列,即使只有一个字段不为空,我想连接。tsql帮助连接几个字段
例如
street,city,state,zip
null,null,AL,36609
目前,我的sql语句是这样的:
select street + ',' + city + ',' + state + ',' + 'zip as address
所以上面的示例记录给我空的地址。有没有简单的方法来显示什么不是nulll?
所以上面的例子中记录将返回:
AL, 36609
我有地址列,即使只有一个字段不为空,我想连接。tsql帮助连接几个字段
例如
street,city,state,zip
null,null,AL,36609
目前,我的sql语句是这样的:
select street + ',' + city + ',' + state + ',' + 'zip as address
所以上面的示例记录给我空的地址。有没有简单的方法来显示什么不是nulll?
所以上面的例子中记录将返回:
AL, 36609
尝试此查询:
SELECT SUBSTRING(
ISNULL(','+street,'')
+ISNULL(','+city,'')
+ISNULL(','+state,'')
+ISNULL(','+zip,'')
,2, 500) AS address
FROM table
试试这个:
select
isnull(street + ',', '') +
isnull(city + ',', '') +
isnull(state + ',', '') +
isnull(zip + ',', '')
这依赖于NULL上的任何操作返回NULL的标准NULL行为。如果street为NULL,那么street +','将返回NULL。 ISNULL运算符将选择空字符串。
有关空串联的更多信息,请参见SET CONCAT_NULL_YIELDS_NULL。 (此选项将永远在未来的版本中启用。)
declare @temp table (street varchar(100) null,city varchar(100) null, state char(2) null, zip varchar(10) null)
insert into @temp (street,city,state,zip) values (null,null,'AL','36609')
select ISNULL(street + ', ','') + ISNULL(city + ', ','') + ISNULL(state + ', ','') + ISNULL(zip,'') from @temp
将返回
AL, 36609
编辑
这是不漂亮,但似乎对各种工作null展示位置:
declare @temp table (street varchar(100) null,city varchar(100) null, state char(2) null, zip varchar(10) null)
insert into @temp (street,city,state,zip) values (null,null,'AL','36609')
insert into @temp (street,city,state,zip) values (null,null,'AL',null)
insert into @temp (street,city,state,zip) values ('Acacia Avenue',null,'AL',null)
insert into @temp (street,city,state,zip) values ('Acacia Avenue',null,null,null)
select
case
when city is null and state is null and zip is null then ISNULL(street, '')
when state is null and zip is null then ISNULL(street + ', ','') + ISNULL(city,'')
when zip is null then ISNULL(street + ', ','') + ISNULL(city + ', ','') + ISNULL(state,'')
else ISNULL(street + ', ','') + ISNULL(city + ', ','') + ISNULL(state + ', ','') + ISNULL(zip,'')
end
from @temp
成绩
AL, 36609
AL
Acacia Avenue, AL
Acacia Avenue
(4 row(s) affected)
我会写如下:
DECLARE @Address VARCHAR(200)
select @Address= isnull(',' + street, '') + isnull(',' + city, '') +
isnull(',' + state, '') + isnull(',' + zip, '') from yourtablename where criteria
SELECT STUFF(@Address, 1, 1, '') AS Address
前面已经指出的其他成员,当你执行任何操作字段具有NULL,结果表达式(值)将始终为空。
@ p.campbell - 很对。我假设从'',''到'+'的飞跃太多了......答案已更新。 – Oded