我的查询返回一组行,其中包含字母A
,E
,I
和L
的组合。这种组合是Alterar
,Excluir
,Incluir
和Listar
的葡萄牙气管。列值可以在A
,AE
,AEL
,AELI
... L
,LI
,LIA
之间变化, LIAE
。
在下面的例子中,我希望能够获得一个包含所有重复字母的唯一字符串。因此结果将是AELI
,即所有行的合并。
我的第一次尝试是使用函数array_to_string
和array_agg
的组合。
select array_to_string(array_agg(colmn), '') from mytable;
然后我使用regexp_matches
函数只匹配同一个字母的一个字符,但没有成功,因为返回AELA
。
select regexp_matches('AELAEILI', '[?AEIL][?AEIL][?AEIL][?AEIL]');
Here上面解释的例子。
这里解释的问题是一段很棒的sql指令。这sqlfiddle是我模拟真实问题的努力。
答案 0 :(得分:2)
我认为这可以通过使用regexp_split_to_table
postgresql函数来实现。
来自文档:
使用POSIX正则表达式作为分隔符拆分字符串。看到 第9.7.3节了解更多信息。
所以,如果有以下数据:
CREATE TABLE example_table (col TEXT);
INSERT INTO example_table(col) VALUES
('AEL'),
('A'),
('E'),
('I'),
('L'),
('LI');
查询SELECT regexp_split_to_table(col, '') as col
将是
col
A
E
L
A
E
I
L
L
I
在设法拆分这样的单词之后,通过添加DISTINCT语句来过滤重复项非常简单:
SELECT DISTINCT(regexp_split_to_table(col, '')) as col
FROM example_table
此查询的结果将是
col
A
E
I
L
最后,我们可以使用以下代码将结果行转换为单个字符串:
SELECT array_to_string(array_agg(col),'') FROM (
SELECT DISTINCT(regexp_split_to_table(col, '')) as col
FROM example_table
) temp_table;