如何在Snowflake中对列内数组元素排序并转换数组格式
解决方案
以下是满足需求的Snowflake SQL查询语句:
SELECT test_date, article_name, CONCAT('[', ARRAY_TO_STRING(ARRAY_SORT(SPLIT(description, ',')), ','), ']') AS sorted_description_array FROM array_test;
逻辑说明
SPLIT(description, ','):将description列的逗号分隔字符串拆分为Snowflake数组类型,例如'C,A,B'会被拆分为{C,A,B}。ARRAY_SORT(...):对拆分后的数组进行字母升序排序,排序后{C,A,B}和{B,C,A}都会变成{A,B,C},确保第3、4行的结果完全一致。ARRAY_TO_STRING(..., ','):将排序后的数组转换回逗号分隔的字符串,得到'A,B,C'。CONCAT('[', ..., ']'):在字符串首尾添加方括号,将格式从Snowflake默认的大括号数组转为方括号格式,最终输出'[A,B,C]'。
替代方案(直接替换数组格式符号)
如果不想多一步数组转字符串的操作,也可以直接对排序后的数组的默认字符串输出进行符号替换,写法更简洁:
SELECT test_date, article_name, REPLACE(REPLACE(ARRAY_SORT(SPLIT(description, ',')), '{', '['), '}', ']') AS sorted_description_array FROM array_test;
查询结果示例
| TEST_DATE | ARTICLE_NAME | SORTED_DESCRIPTION_ARRAY |
|---|---|---|
| 2022-01-01 | AAA | [A] |
| 2022-01-02 | AAA | [A,B] |
| 2022-01-03 | AAA | [A,B,C] |
| 2022-01-03 | AAA | [A,B,C] |
内容的提问来源于stack exchange,提问作者Bad Coder
相关产品推荐
相关产品推荐

