连接时SQL Server控制空格

时间:2015-05-12 03:33:16

标签: sql-server sql-server-2008 concatenation

这似乎是一个简单的问题,但我似乎总是反对。

在SQL Server中连接两个(或更多)字段时,在字段之间添加空格,如:

SELECT Field1 + ' ' + Field2 FROM table

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

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

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

有更简单的方法吗?

2 个答案:

答案 0 :(得分:3)

更简单的方法:

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

答案 1 :(得分:0)

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

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

这可能不是一种“更简单的方式”,但它可能会帮助您提供一些其他想法。