【问题标题】:SQL CONCAT columns and adding return after each nonempty entrySQL CONCAT 列并在每个非空条目后添加返回
【发布时间】:2019-07-02 14:23:36
【问题描述】:

我有一个非常具体的问题。 我必须构建一个 SQL 语句来构建一个表,其中一些列合并在一起。这些列应使用“\n”或“”或“-”等分隔符进行格式化。只有当前面的列不为空或为空时,才应添加这些分隔符。这应该可以防止出现空行或不需要的分隔符。

我是这样开始的:

SELECT
    any_table.table_id,
    CONCAT(any_table.text1, '\n', any_table.text2) AS text1_2,

FROM
    any_table

WHERE any_table.use = 'true'

此代码将 text1 和 text2 连接为新列 text1_2 并使用换行符作为分隔符。缺少的部分是,如果 any_table.text1 不为 null 或为空,则应添加换行符。

有没有优雅的方式用 SQL 来做这件事?

谢谢

【问题讨论】:

    标签: mysql sql concat


    【解决方案1】:

    一些数据库支持一个非常方便的函数,称为concat_ws(),它完全可以满足您的需求:

    CONCAT_WS('\n', NULLIF(any_table.text1, ''), NULLIF(any_table.text2, '')) AS text1_2,
    

    在标准 SQL 中,您可以这样做:

    TRIM(LEADING '\n' FROM CONCAT( '\n', || NULLIF(any_table.text1, ''),
                                   '\n' || NULLIF(any_table.text2, '')
                                 )
        )
    

    您的数据库可能不支持这两种结构。

    【讨论】:

    • 我不认为concat() 是标准SQL
    • 第一个代码非常适合我。非常感谢。
    【解决方案2】:

    如果你在 SQL SERVER 下你可以使用,

    SELECT id, CONCAT(colonne1 + ' - ', colonne2) FROM "table" 
    

    如果您在 Oracle 下:您应该使用 || 进行连接,例如

    SELECT id, CONCAT(colonne1 || ' - ', colonne2) FROM "table"
    

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 2019-12-07
      • 2022-09-30
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      相关资源
      最近更新 更多