我有一个查询,它返回一组包含字母AEIL组合的行。这种组合是用于AlterarExcluirIncluirListar的葡萄牙语助记符。列值可以在AAEAELAELI之间变化。。。LLILIALIAE
在下面的例子中,我希望能够得到一个唯一的字符串,并删除所有重复的字母。因此结果将是AELI,所有行的合并。
postgresql - 在PostgreSQL 8.3上删除一组行中的重复字母-LMLPHP
我的第一次尝试是使用函数array_to_stringarray_agg的组合。

select array_to_string(array_agg(colmn), '') from mytable;

然后我使用regexp_matches函数只匹配同一个字母的一个字符,但没有成功,因为返回了AELA
select regexp_matches('AELAEILI', '[?AEIL][?AEIL][?AEIL][?AEIL]');

Here上面解释的例子。
注意
这里解释的那个问题是一条很好的sql指令。这是我模拟真实问题的努力。

最佳答案

我认为这可以通过使用regexp_split_to_tablepostgresql函数来实现。
从文档中:
使用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;

10-07 12:39
查看更多