【问题标题】:concatenate two database columns into one resultset column将两个数据库列连接到一个结果集列
【发布时间】:2011-09-19 15:26:44
【问题描述】:

我使用以下 SQL 将一个表中的多个数据库列连接到结果集中的一列中:

SELECT (field1 + '' + field2 + '' + field3) FROM table1

当其中一个字段为空时,我得到整个连接表达式的空结果。我该如何克服这个问题?

数据库是 MS SQL Server 2008。顺便问一下,这是连接数据库列的最佳方式吗?有没有标准的 SQL 这样做?

【问题讨论】:

    标签: sql sql-server-2008 concatenation


    【解决方案1】:

    只需将列转换为 Varchar(Size)

    如果两个列都是数字,则使用下面的代码。

    例子:

    Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
    

    col3 的大小是 40 还是别的什么

    【讨论】:

      【解决方案2】:

      如果两个列都是数字,则使用此代码

      只需将列转换为 Varchar(Size)

      示例:

      Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
      

      【讨论】:

        【解决方案3】:

        如果您使用的是 SQL 2012 或更高版本,则可以使用 CONCAT 函数:

        SELECT CONCAT(field1, field2, field3) FROM table1
        

        NULL 字段不会破坏您的连接。

        @bummi - 感谢您的评论 - 编辑了我的答案以对应它。

        【讨论】:

        • 问题是关于 SQLServer 2008 CONCAT 是在 SQLServer 2012 中引入的
        【解决方案4】:

        NULL 的正常行为是任何包含 NULL 的操作都会产生 NULL...

        - 9 * NULL  = NULL  
        - NULL + '' = NULL  
        - etc  
        

        要克服这个问题,请使用 ISNULL 或 COALESCE 将任何 NULL 实例替换为其他内容..

        SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
        

        【讨论】:

          【解决方案5】:

          执行此操作的 SQL 标准方法是:

          SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1
          

          例子:

          INSERT INTO table1 VALUES ('hello', null, 'world');
          SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;
          
          helloworld
          

          【讨论】:

          • @Steve 双管是怎么回事? SQL Server 不应该只是 + 吗?
          • || 是 SQL 标准字符串连接运算符。问题问“是否有任何标准 SQL 这样做?”我正在回答这个问题。也许 OP 的意思是问“有没有简单的 SQL 方法来做到这一点?”
          • @Adrian,不仅仅是甲骨文。许多 RDMS 都遵循这里的标准。当你去尝试做string + string 时很高兴知道它,但它失败了,因为你在一个不熟悉的 RDMS 上。一个很好的例子是有史以来部署最广泛的数据库:sqlite3。 (在所有 iPhone 和 Android 设备上使用)
          • 好吧,我希望能够在任何数据库上执行该 SQL。我不确定应该调用标准 SQL 还是普通 SQL?
          • 问题标记为sql-server-2008 - ||对连接sql server中的字符串无效
          【解决方案6】:

          如果您对 NULL 值有疑问,请使用 COALESCE 函数将 NULL 替换为您选择的值。您的查询将如下所示:

          SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1
          

          http://www.codeproject.com/KB/database/DataCrunching.aspx

          【讨论】:

            【解决方案7】:

            使用 ISNULL 来克服它。

            例子:

            SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1
            

            然后,这会将您的 NULL 内容替换为一个空字符串,这将防止连接操作被评估为整体 NULL 结果。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-01-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多