SQL CONCAT столбцы и добавление возврата после каждой непустой записи - PullRequest
0 голосов
/ 02 июля 2019

У меня очень специфический вопрос. Я должен создать 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 не является нулевым или пустым.

Есть ли элегантный способ сделать это с помощью SQL?

1010 * ТНХ *

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Некоторые базы данных поддерживают очень удобную функцию под названием 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, '')
                             )
    )

Возможно, ваша база данных не поддерживает ни одну из этих конструкций.

0 голосов
/ 02 июля 2019

если вы используете SQL SERVER, вы можете использовать,

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

если вы находитесь под Oracle: вы должны использовать || для конкатенации типа

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