【问题标题】:Correct Amount of Spaces with concatenated person's name in SQL ServerSQL Server 中连接人名的正确空格数
【发布时间】:2011-10-05 14:55:23
【问题描述】:

这是我现在拥有的 SQL。名字和姓氏永远不应该丢失,因为它们在验证界面上是必需的。但是,如果缺少中间的首字母,我不希望结果中有两个空格;我只想要一个空间。我可以放入一个 case 语句,但如果 SQL 已经为此目的提供了一个函数,那似乎有点过分了。有谁知道是否有用于此目的的功能?代码会是什么样子?

SELECT ISNULL(contact.firstname, '') 
         + ' ' 
         + ISNULL(contact.middleinitial, '') 
         + ' ' 
         + ISNULL(contact.lastname, '')
FROM dbo.contact

【问题讨论】:

    标签: sql-server concatenation varchar spaces


    【解决方案1】:
    SELECT
     ISNULL(contact.firstname, '') + 
     ISNULL(' ' + contact.middleinitial + ' ', ' ') + 
     ISNULL(contact.lastname, '')
    

    但是,您应该删除名字、姓氏的 ISNULL(定义为 NOT NULL?)或添加一些修饰符

    SELECT
     LTRIM(RTRIM(
       ISNULL(contact.firstname, '') + 
        ISNULL(' ' + contact.middleinitial + ' ', ' ') + 
        ISNULL(contact.lastname, '')
     ))
    

    【讨论】:

    • 啊非常聪明!我应该知道 ISNULL 将返回 NULL 即使您将空格附加到两侧。所以 ISNULL 函数在这种情况下将返回 null 。我也尝试使用 TRIM ......但没有意识到您必须将左右修剪嵌套到一个函数中。干得好!谢谢!
    【解决方案2】:
    SELECT REPLACE(ISNULL(contact.firstname, '') + ' ' + ISNULL(contact.middleinitial, '') + ' ' + ISNULL(contact.lastname, '')
                   ,'  ',' ')
    FROM dbo.contact
    

    【讨论】:

      【解决方案3】:

      在 SQL Server 2012 及更高版本中,您可以使用 CONCAT 函数:

          SELECT  CONCAT(contact.firstname, ' ' + contact.middleinitial, ' ' + contact.lastname)
          FROM dbo.contact
      

      如果 middleinitial 为 null,则向 null 值附加空格将导致 null 值,CONCAT 将在连接期间跳过此 null 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 2016-01-13
        • 2014-04-20
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多