以逗号分隔值按字母顺序排列字段

Alphabetically order a field with comma separated values

我目前正在处理 Talend 流程,但在订购包含逗号分隔值的字段时遇到问题。这个字段是关于国家的,它可以包含不同的国家。我想知道是否有办法在字段中按字母顺序排列这些值。

我不知道使用 Talend 还是直接使用 sql 查询更容易。

以下是此字段错误值的示例:“葡萄牙、佛得角、摩洛哥、北大西洋、西班牙”,我希望尽可能按字母顺序排列。

使用正确规范化的数据模型,这会容易得多。

要获得排序后的字符串,您需要先取消嵌套元素,然后将它们聚合回排序后的字符串。

select other_columns
       (select string_agg(country, ',' order by country)
        from unnest(string_to_array(countries, ',')) as t(country)
       ) as countries_sorted
from the_table

您可以将其放入一个函数中,让您的生活更轻松:

create function sort_csv_value(p_input text)
  returns text
as
$$
   select string_agg(word, ',' order by word)
   from unnest(string_to_array(p_input, ','));
$$
language sql
immutable;

那么你可以这样使用它:

select other_columns
       sort_csv_value(countries) as countries_sorted
from the_table

这是在 Talend 中的实现方式:

输出将是:

|=---------------------------------------- ------------------=| |国家| |=-------------------------------------------- ----------=| |佛得角、摩洛哥、北大西洋、葡萄牙、西班牙| '------------------------------------------------ --------------'