删除PostgreSQL 8.3上的一组行中的重复字母

时间:2018-06-15 00:04:41

标签: postgresql postgresql-8.3

我的查询返回一组行,其中包含字母AEIL的组合。这种组合是AlterarExcluirIncluirListar的葡萄牙气管。列值可以在AAEAELAELI ... LLILIA之间变化, LIAE

在下面的例子中,我希望能够获得一个包含所有重复字母的唯一字符串。因此结果将是AELI,即所有行的合并。

enter image description here

我的第一次尝试是使用函数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指令。这sqlfiddle是我模拟真实问题的努力。

1 个答案:

答案 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;