【问题标题】:remove duplicates from comma separated string (Amazon Redshift)从逗号分隔的字符串中删除重复项 (Amazon Redshift)
【发布时间】:2016-10-07 04:51:15
【问题描述】:

我正在使用 Amazon Redshift。

我在该字符串中有一个列存储为逗号分隔,如Private, Private, Private, Private, Private, Private, United Healthcare。我想使用query 从中删除重复项,因此结果应该是Private, United Healthcare。我显然从 Stackoverflow 中找到了一些解决方案,并且知道使用正则表达式是可能的。

因此,我尝试使用:

SELECT  regexp_replace('Private, Private, Private, Private, Private, Private, United Healthcare', '([^,]+)(,\1)+', '\1') AS insurances; 

SELECT  regexp_replace('Private, Private, Private, Private, Private, Private, United Healthcare', '([^,]+)(,\1)+', '\g') AS insurances; 

还有一些其他的正则表达式,但似乎不起作用。有什么解决办法吗?

【问题讨论】:

  • 是 Postgres 还是 Redshift? Redshift 所基于的 Postgris 版本太旧了,以至于无法与最新的 Postgres 相比。
  • 它是Redshift,但我认为它使用的是postgrey数据库。
  • 这是两个不同的东西。 Amazon Redshift 基于非常旧的 Postgres 版本。它是 Redshift Postgres - 但不是两者兼而有之,建议的解决方案 regexp_split_to_table 对您不起作用这一事实就是一个迹象。
  • 嗯..好的。在这种情况下我现在该怎么办?顺便感谢您的回复。
  • Amazon Redshift postgrey sql 中不支持的函数:docs.aws.amazon.com/redshift/latest/dg/…

标签: sql amazon-redshift


【解决方案1】:

这是一个用于 Amazon Redshift 的用户定义函数 (UDF)

CREATE FUNCTION f_uniquify (s text)
  RETURNS text
IMMUTABLE
AS $$
  -- Split string by comma-space, remove duplicates, convert back to comma-separated
  return ', '.join(set(s.split(', ')))
$$ LANGUAGE plpythonu;

测试它:

select f_uniquify('Private, Private, Private, Private, Private, Private, United Healthcare');

返回:

United Healthcare, Private

如果返回值的顺序很重要,那么它需要一些更具体的代码。

【讨论】:

    【解决方案2】:

    试试这个方法,

    SELECT  array_agg(DISTINCT insurances) 
    FROM (SELECT  regexp_split_to_table('Private, Private, Private, Private, Private, Private, United Healthcare'
                  , ',\s+') AS insurances) x;
    

    另一种方式

    SELECT DISTINCT UNNEST(regexp_split_to_array('Private, Private, Private, Private, Private, Private, United Healthcare', ',\s+')) AS insurances;
    

    检查http://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html 两者都会因红移而失败,这些都不会将text 转换为text[]

    【讨论】:

    【解决方案3】:

    另一种选择是尝试 Python UDF。简单的 Python 函数对字符串进行重复数据删除并返回正确的版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2012-01-30
      • 2023-03-10
      • 2016-12-23
      • 2016-05-21
      • 2021-12-21
      • 1970-01-01
      相关资源
      最近更新 更多