在我的数据库中,我列填充了这些数据:
1
1.1
1.1.1
1.1.1.1
1.1.2
1.10
1.11
1.2
1.9
我想对它进行排序,以获得如下结果:
1
1.1
1.1.1
1.1.1.1
1.1.2
1.2
1.9
1.10
1.11
我怎样才能做到这一点?简单使用“ORDER BY”会产生错误的结果,因为它是字典顺序。
答案 0 :(得分:6)
您可以将字符串拆分为数组,将其转换为int[]
并依赖Postgres对数组的自然顺序:
SELECT mycolumn
FROM mytable
ORDER BY STRING_TO_ARRAY(mycolumn, '.')::int[] ASC
答案 1 :(得分:1)
投射到cidr
会起作用(如果数字表现良好)
DROP table meuk;
CREATE table meuk
( id SERIAL NOT NULL PRIMARY KEY
, version text
);
INSERT INTO meuk(version) VALUES
('1' )
, ('1.1' )
, ('1.1.1' )
, ('1.1.1.1' )
, ('1.1.2' )
, ('1.10' )
, ('1.11' )
, ('1.2' )
, ('1.9' )
;
SELECT * FROM meuk
ORDER BY version::cidr
;
结果:
INSERT 0 9
id | version
----+---------
1 | 1
2 | 1.1
3 | 1.1.1
4 | 1.1.1.1
5 | 1.1.2
8 | 1.2
9 | 1.9
6 | 1.10
7 | 1.11
(9 rows)