我有一个查询返回一组包含字母 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是我模拟我的真实问题的努力。
最佳答案
我认为这可以通过使用 regexp_split_to_table
postgresql 函数来实现。
来自文档:
Split string using a POSIX regular expression as the delimiter. See Section 9.7.3 for more information.
所以,如果有以下数据:
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;
关于postgresql - 删除 PostgreSQL 8.3 上一组行中的重复字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50867514/