【发布时间】:2013-04-04 13:53:44
【问题描述】:
我有一个 sql 查询,它在字段中显示地址 1,地址 2 为“地址 1,地址 2”。我的查询是
(S.Address1 + ' , ' + S.Address2)as Address1
但是当 Address2 中的值为空白时,它会显示 '地址1,' 我只需要显示地址1。如何删除逗号
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql
我有一个 sql 查询,它在字段中显示地址 1,地址 2 为“地址 1,地址 2”。我的查询是
(S.Address1 + ' , ' + S.Address2)as Address1
但是当 Address2 中的值为空白时,它会显示 '地址1,' 我只需要显示地址1。如何删除逗号
【问题讨论】:
标签: sql sql-server sql-server-2008 tsql
使用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
【讨论】:
COALESCE里面。
NULLIF。 叹息
NULL 不是空白的。
我认为 J W 很接近,但我相信您想要的实际公式是:
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,任何显式将该选项设置为 OFF 的应用程序都会产生错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。
【讨论】:
ISNULL 是 T-SQL 方言,仅限于两个输入,并强制结果的类型与其第一个输入的类型相同,无论是什么类型优先规则通常会说。 COALESCE 是标准 SQL,扩展到多个输入(返回第一个非 NULL 值)并执行正常类型优先级以确定结果类型。除了一些极端情况(这里不存在)之外,我总是选择COALESCE。
如果 address2 可以是 null 或空字符串,或者只是空格,您需要类似:
select address1 +
case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2
else '' end
【讨论】:
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 是 null 还是空。 Details can be found here.
【讨论】: