我有一个SQL查询,它显示字段中的address1和address2为'address1,address2'。我的查询是
(S.Address1 + ' , ' + S.Address2)as Address1
但是当Address2中的值为空时,它会显示 '地址1,' 我只需要显示address1.How我可以删除逗号
答案 0 :(得分:5)
使用COALESCE
(COALESCE(S.Address1,'') + ' , ' + COALESCE(S.Address2, '')) as Address1
但上述声明的问题是当,
为空时它将跟踪address2
,以修复
(COALESCE(S.Address1,'') + COALESCE(' , ' + S.Address2, '')) as Address1
更新1
CASE WHEN S.Address2 = ''
THEN S.Address1
ELSE S.Address1 + ' , ' + S.Address2
END AS Addrss
答案 1 :(得分:3)
S.Address1 + COALESCE(' , ' + NULLIF(S.Address2,''),'') as Address1
(以下不相关,因为OP现在说列值为空,不是NULL
)
<击>
但是你还有另一个问题 - 上面的内容将无效(因为你显然已将CONCAT_NULL_YIELDS_NULL
设置为OFF
。需要启用此功能(通常将ANSI_NULLS
设置为ON
),since:
击>在SQL Server
CONCAT_NULL_YIELDS_NULL
的未来版本中,ON
始终为{{1}},任何将选项明确设置为OFF的应用程序都将生成错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
<击> 撞击>
答案 2 :(得分:1)
SELECT CONCAT(Address1 -- concatenation of address 1 with..
, CASE WHEN ISNULL(NULLIF(Address2, '')) -- if address 22 is null or empty
THEN '' -- concat with nothing
ELSE CONCAT( ' , ', Address2) -- else concat with a comma and address 2
END
)
行CASE WHEN ISNULL(NULLIF(Address2, ''))
用于确定address2是空还是空。 Details can be found here
答案 3 :(得分:1)
如果address2可以为null或空字符串,或者只是空格,则需要以下内容:
select address1 +
case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2
else '' end