SQL CONCAT 列并在每个非空条目后添加 return

SQL CONCAT columns and adding return after each nonempty entry

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

我是这样开始的:

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 不为空或为空,则应仅添加换行符。

SQL有没有一种优雅的方法?

感谢

一些数据库支持一个非常方便的函数,称为 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, '')
                             )
    )

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

如果您在 SQL 服务器下,您可以使用,

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

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

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