Объединить данные трех столбцов в один столбец со значениями одного столбца также в Postgres - PullRequest
0 голосов
/ 11 марта 2020

Может кто-нибудь сказать мне, какая команда используется для объединения трех столбцов данных в один столбец в PostgreSQL базе данных?

например, если столбцы имеют

begin | Month | Year
   12 |     1 | 1988
   13 |     3 | 
   14 |       | 2000
      |     5 | 2012

вывод:

Result
12-1-1988 
13-3-null
14-null-2000
null-5-2012

На самом деле, я объединил два столбца, но он отображает только те значения в результате, который не является нулевым во всех столбцах, но я хочу также отобразить это значение, которое не является нулевым в одном столбце.

1 Ответ

0 голосов
/ 11 марта 2020

Если вы просто используете стандартную функцию конкатенации, такую ​​как concat() или оператор ||, вы получите полную строку null, если любой элемент равен null.

. Вы можете использовать функция concat_ws(), которая игнорирует значение null. Но вы ожидаете, что они будут показаны.

Таким образом, вам нужно преобразовать действительное значение null в ненулевой текст 'null'. Это можно сделать с помощью функции COALESCE(), которая принимает несколько аргументов и возвращает первый ненулевой. Но здесь возникает проблема, что строка 'null' имеет другой тип (text), чем столбцы (int). Таким образом, вы должны выровнять типы, например, приведя значения int к text ранее. Итак, ваш запрос может выглядеть следующим образом:

Нажмите: demo: db <> fiddle

SELECT
    concat_ws('-',
        COALESCE(begin::text, 'null'), 
        COALESCE(month::text, 'null'), 
        COALESCE(year::text, 'null')
    )
FROM mytable
...