是否可以通过postgreSQL中的子串进行排序?

时间:2016-03-29 10:56:23

标签: sql postgresql version-sort

我有一个名为 Exception in thread "main" java.lang.NullPointerException at main$abc.<init>(main.java:91) at main.main(main.java:99) 的表,其中包含一个名为widgets的字符串列。

版本数据采用句点分隔的字符串格式,类似于语义版本控制。例如“1.2.4”

当我执行传统version时,我会得到以下顺序

ORDER BY widgets.version

如何更新我的查询以便返回的订单是版本pt 1,版本pt 2,然后是版本pt 3?

3 个答案:

答案 0 :(得分:8)

最简单的方法是将版本字符串转换为整数数组,然后对该数组进行排序:

select id, 
       version
from widgets
order by string_to_array(version, '.')::int[]

请注意,如果版本包含非数字值,则会失败。

答案 1 :(得分:1)

你试过吗?

SELECT
  id,
  split_part(version, '.', 1)::int as major,
  split_part(version, '.', 2)::int as minor,
  split_part(version, '.', 3)::int as patch
FROM
  widgets
ORDER BY major, minor, patch

答案 2 :(得分:-1)

丑陋的黑客:投射到网络地址:(仅适用于小值,短字符串等)

SELECT * FROM widgets
ORDER BY version::cidr
        ;