在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
的输出。
答案 0 :(得分:0)
在oracle中,您正在搜索匹配项,而不是拆分。在Postgres中做同样的事情:
SELECT m[1] FROM regexp_matches('a,,b', '[^,]+', 'g') AS T(m);
编辑:感谢a_horse_with_no_name和TimBiegeleisen使我注意到它正在每行中返回一个数组。
答案 1 :(得分:0)
对于这样的简单拆分/嵌套,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
之类的输入,并将空字符串视为null。