我在postgres 14.1数据库中有一个自然排序字符串(provider = icu, locale = 'en-u-k -true')的排序。NodeJS v12.16.1。当字符串有非零的前导数,比如1 2 11 22,排序对我来说工作得很好。如果数字以0开头,我就会得到正确的顺序[000,00,0,001,01,1,002,02,2],但在这种情况下,我期望的顺序是[000,001,002,00,01,02,0,1,2]。是否有任何方法可以使用区域设置的附加设置或其他方式获得此行为。最主要的是它应该工作得快(最多2-3秒),大约一百万条记录。
您可以先按前导零的数目排序,然后按数值排序:
ORDER BY
length(col)
- length(trim(LEADING '0' FROM col))
DESC,
col COLLATE natural_coll