如何在SQL中对VARCHAR类型分隔值按升序排序并重组?
解决方案
首先看你现有代码的问题:
- 拆分字符串时用了逗号
,作为分隔符,但你的数据里是用冒号:分隔的,这会导致拆分失败,无法正确提取各个分段 - 你仅完成了拆分、分组和排序操作,没有将排序后的分段重新拼接成目标格式的字符串
针对你的需求,正确的SQL写法如下:
SELECT original_v, LISTAGG(split_value, ':') WITHIN GROUP (ORDER BY split_value ASC) AS sorted_v FROM ( SELECT v AS original_v, VALUE AS split_value FROM splittable1, LATERAL STRTOK_SPLIT_TO_TABLE(splittable1.v, ':') -- 替换为正确的冒号分隔符 ) t GROUP BY original_v;
代码说明:
- 内层子查询:使用
STRTOK_SPLIT_TO_TABLE和正确的冒号分隔符,将每个原始字符串拆分成独立的分段,同时保留原始字符串用于后续分组 - 外层查询:通过
LISTAGG函数,将每个原始字符串对应的分段按升序排序后,用冒号重新拼接成新的字符串,最后按原始字符串分组得到最终结果
执行该SQL后,就能得到你期望的输出:
- ('A:B')
- ('A:C:D:Z')
- ('A:M:N:P')
内容的提问来源于stack exchange,提问作者Jerry Arnold
相关产品推荐
相关产品推荐

