【问题标题】:SQL Server controlling spaces when concatenating连接时 SQL Server 控制空格
【发布时间】:2015-05-12 03:33:15
【问题描述】:

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

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

SELECT Field1 + ' ' + Field2 FROM table

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

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

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

有没有更简单的方法?

【问题讨论】:

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


    【解决方案1】:

    更简单的方法:

    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
    

    【讨论】:

    • 感谢@shA.t 正是我正在寻找的答案。
    • 使用这种方法,如果 Field1 不为 NULL,则字符串将从 Field1 的第二个字符开始,这是不正确的
    【解决方案2】:

    我发现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
    

    这可能不是一个“更简单的方法”,但它可能会帮助您提供一些替代想法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-05
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多