Конвертировать запрос Oracle в Postgresql - PullRequest
0 голосов
/ 23 октября 2018

В Oracle

(select regexp_substr('a,,b','[^,]+', 1, level) 
 from dual 
 connect by regexp_substr('a,,b', '[^,]+', 1, level) is not null);

это дает мне вывод

a
b

В Postgresql

select regexp_split_to_table( 'a,,b',',');

это дает мне вывод

a

b

Это дает пустую строку между a и b.Может кто-нибудь, пожалуйста, подскажите, как я могу получить вывод, как Oracle.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Для такого простого разбиения / удаления будет лучше выбрать string_to_array.Обработка регулярных выражений довольно дорогая.

Если вы поместите функцию возврата набора в предложение FROM (где оно должно быть), вы можете отфильтровать пустые строки:

SELECT t.m
FROM unnest(string_to_array('a,,b', ',')) as t(m)
where nullif(trim(t.m),'') is not null;

nullif(trim(t.m),'') также будет обрабатывать вводы, такие как a, ,b и обрабатывать пустую строку как ноль.

Онлайн пример: https://rextester.com/VDWUEM85289

0 голосов
/ 23 октября 2018

В оракуле вы искали спички, а не раскалывались.Делаем то же самое в Postgres:

SELECT m[1] FROM regexp_matches('a,,b', '[^,]+', 'g') AS T(m);

РЕДАКТИРОВАТЬ: Спасибо a_horse_with_no_name и TimBiegeleisen за то, что я заметил, что он возвращал массив в каждой строке.

...