разделение sql представляет в виде строки пространством в таблицу в postgresql

Я ищущий функцию как regexp_split_to_table, но наш дб являюсь версией 8.2.9, таким образом, это не имеет его. Я действительно только разделяю на пространстве, таким образом, строка как

как теперь коричневая корова

возвратился бы

+------+
|Column|
+------+
|how   | 
|now   | 
|brown | 
|cow   |
+------+

существует ли простая функция, которая может обработать это или что-то, что я должен записать сам?

17
задан veilig 31 December 2009 в 18:12
поделиться

2 ответа

Можно разделить массив на resultet с помощью функции unnest, а строковый литерал превратить в массив с помощью функции string_to_array. Комбинируя и то, и другое, вы получаете следующее:

alvherre=# select unnest(string_to_array('the quick lazy fox', ' '));
 unnest 
--------
 the
 quick
 lazy
 fox
(4 filas)

Поскольку в версии 8.2 нет UNNEST, вы можете записать ее в PostgreSQL следующим образом:

create or replace function unnest(anyarray) returns setof anyelement
language sql as $$
   select $1[i] from generate_series(array_lower($1, 1),
                                     array_upper($1, 1)) as i;
$$; 
37
ответ дан 30 November 2019 в 11:32
поделиться

Я думаю, что вам придется RETURNS SET или RETURNS TABLE самостоятельно.

Обновленный ответ: с помощью PL/pgSQL:

pg=> CREATE OR REPLACE FUNCTION string_to_rows(text) RETURNS SETOF TEXT AS $$ 
  DECLARE
    elems text[];      
  BEGIN
    elems := string_to_array($1, ' ');
    FOR i IN array_lower(elems, 1) .. array_upper(elems, 1) LOOP
      RETURN NEXT elems[i];
    END LOOP;
    RETURN;
  END
$$ LANGUAGE 'plpgsql';
CREATE FUNCTION

pg=> SELECT "Column" FROM string_to_rows('how now brown cow') d("Column");
 Column 
--------
 how
 now
 brown
 cow
(4 rows)

Оригинальный ответ: с помощью PL/perl:

pg=> CREATE LANGUAGE plperl; 
CREATE LANGUAGE

pg=> CREATE FUNCTION psplit_to_rows(text) RETURNS SETOF TEXT AS $$
pg$>   for my $t (split ' ', $_[0]) { return_next $t; }
pg$>   undef;
pg$> $$ LANGUAGE plperl;
CREATE FUNCTION

pg=> SELECT "Column" FROM psplit_to_rows('how now brown cow') d("Column");
 Column 
--------
 how
 now
 brown
 cow
(4 rows)

Очевидно, что вы можете расширить это для работы с разделителем по вашему выбору, и т.д. (Примечание, Я не уверен, действительно ли вы хотели, чтобы колонка называлась "Колонка", требующая кавычки идентификатора, чтобы избежать столкновения ключевых слов, но, вот вы где.)

.
2
ответ дан 30 November 2019 в 11:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: