Конвертировать массив в строки в Postgres - PullRequest
0 голосов
/ 22 мая 2018

Если у меня есть что-то подобное в операторе SQL ('A','B','C'), как мне преобразовать его в столбец с несколькими строками, подобными этому

col
---
 A
 B
 C

Я не могу изменить способ создания строки (так каквводится в SQL-запрос из внешней программы).Например, я не могу сделать это как ['A','B','C'] (заменить квадратными скобками).Я мог бы обернуть что-нибудь вокруг этого, хотя [('A','B','C')] или что-то еще.

Любая помощь?

ОБНОВЛЕНИЕ 1

У меня есть PostgreSQL 8.4.20

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Вы можете создать ARRAY из VALUES и затем удалить его:

SELECT 
    unnest(ARRAY[col_a, col_b, col_c]) 
FROM 
    (VALUES('A','B','C')) AS x(col_a, col_b, col_c)

Результат:

| unnest |
|--------|
|      A |
|      B |
|      C |

Редактировать: вы также можете настроить ответ jspcal с помощью долларовых кавычек ($$), например, так что вы можете объединить вашу строку в оператор SQL:

  SELECT * FROM regexp_split_to_table(
    regexp_replace(
      $$('A','B','C','D','foo')$$,
      '^\(''|''\)+', '', 'g'),
      ''','''
    );
0 голосов
/ 22 мая 2018

Встроенная функция regexp_split_to_table сделает это за вас.Так как вы планируете вводить его напрямую, без экранирования, используйте $$ ( цитирование доллара ) из ответа thibautg .

select * from regexp_split_to_table(
    regexp_replace($$('A','B','C')$$, '^\(''|''\)+', '', 'g'),
    ''','''
);
...