我有一张记录表,其中有一个'版本'属性。版本存储为文本。我知道如何匹配特定版本(例如WHERE version = '1.2.3'
),但我希望能够在版本号上使用比较运算符(<,>,=等)(例如WHERE version > '1.2.3'
)。
有谁知道实现这个目标的好方法?
答案 0 :(得分:3)
对于 versionsort ,转换为cidr 可能是一个解决方案。它适用于琐碎的案件。非数字字符可能会破坏聚会。
-- some data
DROP table meuk;
CREATE table meuk
( id SERIAL NOT NULL PRIMARY KEY
, version text
);
INSERT INTO meuk(version) VALUES
( '1.1.1'), ( '1.1.2'), ( '1.1.11'), ( '1.1.102')
, ( '0.1.1'), ( '2.1.2'), ( '22.1.11'), ( '0.1.102')
;
SELECT * FROM meuk
ORDER BY version::cidr -- cast to cidr (less restrictive than inet)
;
Rseult:
DROP TABLE
CREATE TABLE
INSERT 0 8
id | version
----+---------
5 | 0.1.1
8 | 0.1.102
1 | 1.1.1
2 | 1.1.2
3 | 1.1.11
4 | 1.1.102
6 | 2.1.2
7 | 22.1.11
(8 rows)