SQL: конвертировать токены в строке или элементах массива в строки таблицы - PullRequest
0 голосов
/ 21 апреля 2010

Есть ли в SQL простой способ преобразовать строку или массив в строки таблицы?

Например, давайте оставим строку «a, b, c, d, e, f, g». Я бы предпочел SQL-оператор, который принимает эту строку, разделяет ее на запятые и вставляет результирующие строки в таблицу. В PostgreSQL я могу использовать regexp_split_to_array () и разбить строку на массив. Так что, если вы знаете способ вставить элементы массива в виде строк в таблицу, это тоже сработает.

Ответы [ 3 ]

4 голосов
/ 21 апреля 2010

Чтобы превратить массив в набор строк, вы можете просто использовать unnest () :

SELECT unnest('{1,2,3,4}'::int[])

Что вы можете затем, конечно, объединить с regexp_split_to_array, чтобы стать:

SELECT unnest(regexp_split_to_array('1,2,3,4', ','))

или как уже упоминалось ранее, используя string_to_array () вместо regexp_split_to_array (), если это простой сплит.

1 голос
/ 21 апреля 2010

Я бы использовал string_to_array, это немного быстрее :) Несмотря на это, вы можете создать из него table с помощью некоторых generate_series трюков.

CREATE OR REPLACE FUNCTION array_to_table(anyarray)
RETURNS SETOF anyelement AS $$ 
SELECT $1[i] 
FROM generate_series(array_lower($1,1), array_upper($1,1)) g(i);
$$ LANGUAGE SQL STRICT IMMUTABLE;

SELECT * FROM array_to_table(string_to_array('a,b,c,d,e,f,g', ','));
0 голосов
/ 21 апреля 2010

Generate_series (FROM, TO, STEP) с (1, 7, 2) создает серию 1, 3, 5, 7, которую можно использовать для индексации массива для подстроки (COLUMN, INDEX, LEN):

SELECT substring ('a,b,c,d', generate_series (1, 7, 2), 1) AS x ;
 x 
---
 a
 b
 c
 d
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...