0

我有一个 sql 查询,它在字段中显示 address1 和 address2 作为'address1,address2'。我的查询是

(S.Address1 + '  ,  ' + S.Address2)as Address1 

但是当地址 2 中的值为空白时,它显示“地址 1”,我只需要显示地址 1。如何删除逗号

4

4 回答 4

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
于 2013-04-04T13:54:25.203 回答
3

我认为 JW 很接近,但我相信你想要的实际公式是:

S.Address1 + COALESCE('  ,  ' + NULLIF(S.Address2,''),'') as Address1

(下面不相关,因为 OP 现在说列值是空白的,不是NULL

但是您还有另一个问题-上述方法(还)不起作用,因为您显然已CONCAT_NULL_YIELDS_NULL设置为OFF. 这需要打开(通常通过设置ANSI_NULLSON),因为

在 SQL Server 的未来版本中,任何CONCAT_NULL_YIELDS_NULLON选项显式设置为 OFF 的应用程序都会生成错误。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

于 2013-04-04T13:58:09.330 回答
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
       )

Sqlfiddle 在这里

该行CASE WHEN ISNULL(NULLIF(Address2, ''))用于确定 address2 是空还是空。详细信息可以在这里找到

于 2013-04-04T14:01:54.453 回答
1

如果 address2 可以是 null 或空字符串,或者只是空格,则需要类似以下内容:

select address1 + 
case when length(trim(ifnull(address2, ''))) > 0 then ', ' + address2
else '' end
于 2013-04-04T14:02:41.917 回答