Postgres自然顺序

Ron*_*adi 2 sql postgresql sql-order-by

我在postgres中有一个排序问题,列中包含版本等值.版本是字符变化的,其值如下(未排序).

1.2
1.3
1.10.1
1.9
Run Code Online (Sandbox Code Playgroud)

我如何按自然顺序排序,以便在我发出SELECT version FROM TABLE_A ORDER BY version DESC它时会给我

1.10.1
1.9
1.3
1.2
Run Code Online (Sandbox Code Playgroud)

代替

1.9
1.3
1.2
1.10.1
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 6

Postgres允许您按数组排序 - 这基本上是版本号所代表的.因此,您可以使用以下语法:

order by string_to_array(version, '.')::int[] desc
Run Code Online (Sandbox Code Playgroud)

这是一个完整的例子:

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;
Run Code Online (Sandbox Code Playgroud)

甚至是演示.