SQL 连接时服务器控制空格

SQL Server controlling spaces when concatenating

这似乎是一个简单的问题,但却是我似乎总是遇到的问题。

在 SQL 服务器中连接两个(或更多)字段并在字段之间添加 space 时,例如:

SELECT Field1 + ' ' + Field2 FROM table

如果Field1Field2可能是null,那么我们可以使用ISNULL将其转换为空字符串,但space仍然存在。我解决这个问题的一种方法是在检查它是否为 null 之前添加 space。然后修剪末端以允许字段中的空字符串。例如:

SELECT LTRIM(RTRIIM(ISNULL(Field1 + ' ','') + ISNULL(Field2, ''))) FROM Table

这会处理任一字段中的空字符串,但如果要以这种方式连接的字段超过 2 个,则会变得很长。

有没有更简单的方法?

更简单的方法:

SELECT COALESCE(Field1 + ' ' + Field2, Field1, Field2, '')
FROM Table

这也避免了 LTRIMRTRIM 字段的更改。


但对于更多字段我使用:

SELECT SUBSTRING(ISNULL(' ' + Field1, '') + ISNULL(' ' + Field2, '')
                                    + ISNULL(' ' + Field3, '') 
                                    + ISNULL(' ' + Field4, '') 
                                    + ...
                                    + ISNULL(' ' + FieldN, ''), 2, 4000)
FROM Table

我发现 Aaron Bertrands answer 在使用 NULLS and/or 空字段的组合做类似的事情时非常有帮助。对于我的解决方案,我最终得到了;

SELECT STUFF(COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_line1)), ''), '') + 
          COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_line2)), ''), '') + 
          COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_line3)), ''), '') +
          COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_suburb)), ''), '') +
          COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_state)), ''), '') +
          COALESCE(' ' + NULLIF(RTRIM(LTRIM(a.address_postcode)), ''), ''), 1, 1, '') 
          AS Address_Detail

这可能不是 "easier way",但它可能会帮助您提出一些替代想法。