【发布时间】:2021-12-19 08:42:30
【问题描述】:
为了使用数值对 PostgreSQL 14 varchar 列进行排序,我使用了由
创建的排序规则CREATE COLLATION de_pos (LOCALE = 'de-DE-u-kn-true', PROVIDER = 'icu');`
使用这样的排序规则 ORDER BY 会产生像这样的正确顺序
1.2.10
1.2.20
1.2.100
如果没有特殊的排序规则 ORDER BY 会导致
1.2.10
1.2.100
1.2.20
我想知道,该排序规则定义的每个部分到底是什么意思?
de-DE => 德语-德国语言环境
u => UTF8 ????
kn => ????
真 => ????
【问题讨论】:
-
附带说明:您还可以以不同的方式对版本号进行排序:
order by string_to_array(the_column, '.')::int[]但仅当值是严格的数字时才有效 -
是的,我知道该函数并进行了测试:它仅适用于两个级别(这意味着对于单个点,1.10、1.20、1.100 等)但我需要一个准递归 string_to_array 由于我的值为 1.2.3.10、1.2.3.20 等。
-
这也适用于
1.2.3.20之类的东西 dbfiddle.uk/… -
哇,我以为我已经测试过了,太好了……谢谢
标签: sql postgresql collation