0

我有一个查询,它返回一组由字母 AE和. 组成的IL。该组合是葡萄牙语助记符Alterar, Excluir,IncluirListar。列值可以在A, AE, AEL, AELI... L, LI, LIA,之间变化LIAE

在下面说明的示例中,我希望能够获得一个删除所有重复字母的唯一字符串。所以结果将是AELI,所有行的合并。

在此处输入图像描述

我的第一次尝试是使用函数array_to_stringarray_agg.

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

然后我使用该regexp_matches函数仅匹配同一字母的一个字符,但没有成功,因为返回了AELA.

select regexp_matches('AELAEILI', '[?AEIL][?AEIL][?AEIL][?AEIL]');

这里是上面解释的例子。


笔记

这里解释的问题是一条很棒的 sql 指令。这个sqlfiddle是我模拟我真正的问题的努力。

4

1 回答 1

2

我认为这可以通过使用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;
于 2018-06-15T09:47:32.850 回答