我有一个 sql 查询,它在字段中显示 address1 和 address2 作为'address1,address2'。我的查询是
(S.Address1 + ' , ' + S.Address2)as Address1
但是当地址 2 中的值为空白时,它显示“地址 1”,我只需要显示地址 1。如何删除逗号
我有一个 sql 查询,它在字段中显示 address1 和 address2 作为'address1,address2'。我的查询是
(S.Address1 + ' , ' + S.Address2)as Address1
但是当地址 2 中的值为空白时,它显示“地址 1”,我只需要显示地址 1。如何删除逗号
采用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
我认为 JW 很接近,但我相信你想要的实际公式是:
S.Address1 + COALESCE(' , ' + NULLIF(S.Address2,''),'') as Address1
(下面不相关,因为 OP 现在说列值是空白的,不是NULL
)
但是您还有另一个问题-上述方法(还)不起作用,因为您显然已CONCAT_NULL_YIELDS_NULL
设置为OFF
. 这需要打开(通常通过设置ANSI_NULLS
为ON
),因为:
在 SQL Server 的未来版本中,任何
CONCAT_NULL_YIELDS_NULL
将ON
选项显式设置为 OFF 的应用程序都会生成错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
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 是空还是空。详细信息可以在这里找到。
如果 address2 可以是 null 或空字符串,或者只是空格,则需要类似以下内容:
select address1 +
case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2
else '' end