删除 PostgreSQL 8.3 上一组行中的重复字母
Removing repeated letters in a set of rows on PostgreSQL 8.3
我有一个查询 returns 一组由字母 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;
我有一个查询 returns 一组由字母 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;