Разделить столбец на несколько строк на основе нескольких разделителей в Postgres - PullRequest
1 голос
/ 18 июня 2020

У меня есть следующая таблица в postgres 11.

col1
a;b;c
d/e/f
g and h
i with k
l + m

Я хотел бы разделить эту таблицу на основе определенных разделителей (/, +,; и, with]). Желаемый результат:

col1          col2
a;b;c         a
a;b;c         b
a;b;c         c
d/e/f         d
d/e/f         e
d/e/f         f
g and h       g
g and h       h
i with k      i
i with k      k
l + m         l
l + m         m

Я пытаюсь выполнить запрос ниже.


select distinct * from table t,
UNNEST(REGEXP_SPLIT_TO_ARRAY(t.col1, '\s+[/|+|;|and|with]\s+')) s(col2)

1 Ответ

1 голос
/ 18 июня 2020

Вы можете использовать

[/+;]|\s+(?:and|with)\s+
\s*(?:[/+;]|and|with)\s*

См. Демонстрацию regex # 1 и regex demo # 2 .

Подробности

  • [/+;] - a +, / или ; char - | - или
  • \s+(?:and|with)\s+ - an and или with слова, заключенные в один или несколько пробелов
  • \s*(?:[/+;]|and|with)\s* соответствует строкам /, +, ; или and или with, заключенным в 0 или более пробелов.

Примечание (?:...) - это группа без захвата , что является естественным выбором, когда значение, сопоставленное конструкцией группирования, не будет извлекаться / использоваться позже.

...