【问题标题】:Removing repeated letters in a set of rows on PostgreSQL 8.3在 PostgreSQL 8.3 上删除一组行中的重复字母
【发布时间】:2018-11-24 19:45:29
【问题描述】:

我有一个查询,它返回一组包含字母 AEIL 的行。该组合是AlterarExcluirIncluirListar 的葡萄牙语助记符。列值可以在 AAEAELAELI...LLILIALIAE 之间变化。

在下面的示例中,我希望能够获得一个删除所有重复字母的唯一字符串。所以结果将是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]');

Here上面解释的例子。


注意

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

【问题讨论】:

    标签: postgresql postgresql-8.3


    【解决方案1】:

    我认为这可以通过使用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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 2019-07-03
      • 2018-08-11
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多