我有一个名为 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?
答案 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
;