如何在Snowflake中使用SQL对版本字符串进行排序?
在Snowflake中对版本号字符串进行数值排序的方法
直接对版本号字符串做普通排序会不符合数值逻辑(比如5.1.87会排在5.1.357之前,因为字符串逐字符匹配时8大于3),以下两种方法可以实现正确的数值排序:
方法1:拆分版本段并转换为数值排序
通过SPLIT_PART将版本号按.拆分为主版本、次版本、修订号,分别转为数值类型后排序:
WITH version_data AS ( SELECT column1 AS version FROM VALUES ('5.14.0'), ('5.10.1'), ('5.1.8'), ('5.1.87'), ('5.1.357'), ('26.3.0'), ('24.1.1') ) SELECT version FROM version_data ORDER BY TO_NUMBER(SPLIT_PART(version, '.', 1)) ASC, TO_NUMBER(SPLIT_PART(version, '.', 2)) ASC, TO_NUMBER(SPLIT_PART(version, '.', 3)) ASC;
方法2:使用PARSE_VERSION函数(推荐)
Snowflake提供了专门处理版本号的PARSE_VERSION函数,它会将版本字符串解析为可按数值逻辑比较的版本对象,排序更简洁准确:
WITH version_data AS ( SELECT column1 AS version FROM VALUES ('5.14.0'), ('5.10.1'), ('5.1.8'), ('5.1.87'), ('5.1.357'), ('26.3.0'), ('24.1.1') ) SELECT version FROM version_data ORDER BY PARSE_VERSION(version) ASC;
正确排序结果
执行上述任意方法后,得到的数值排序结果为:
- 5.1.8
- 5.1.87
- 5.1.357
- 5.10.1
- 5.14.0
- 24.1.1
- 26.3.0
内容的提问来源于stack exchange,提问作者Felipe Hoffa
相关产品推荐
相关产品推荐

