我在postgres中有一个排序问题,其中包含诸如版本之类的值。版本是字符变化的,其值如下所示(无序)。
1.2 1.3 1.10.1 1.9
我如何按照自然顺序排序,这样当我发行SELECT version FROM TABLE_A ORDER BY version DESC时就会给我
SELECT version FROM TABLE_A ORDER BY version DESC
1.10.1 1.9 1.3 1.2
代替
1.9 1.3 1.2 1.10.1
Postgres允许您按数组排序-本质上就是版本号所代表的含义。因此,您可以使用以下语法:
order by string_to_array(version, '.')::int[] desc
这是一个完整的示例:
select * from (values ('1'), ('2.1'), ('1.2.3'), ('1.10.6'), ('1.9.4')) v(version) order by string_to_array(version, '.')::int[] desc;
甚至是示威。