订购以点分隔的数字序列(例如,版本号)

Sim*_*mon 3 sql postgresql select sql-order-by

在我的数据库中,我列填充了这些数据:

1
1.1
1.1.1
1.1.1.1
1.1.2
1.10
1.11
1.2
1.9
Run Code Online (Sandbox Code Playgroud)

我想对它进行排序,得到的结果如下:

1
1.1
1.1.1
1.1.1.1
1.1.2
1.2
1.9    
1.10
1.11
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?简单使用"ORDER BY"会产生错误的结果,因为它是字典顺序.

Mur*_*nik 6

您可以将字符串拆分为数组,将其转换为int[]依赖Postgres对数组的自然顺序:

SELECT   mycolumn
FROM     mytable
ORDER BY STRING_TO_ARRAY(mycolumn, '.')::int[] ASC
Run Code Online (Sandbox Code Playgroud)