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"
我有一个非常具体的问题。 我必须构建一个 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"