有没有一种方法可以像字符串一样用前导零对数字进行排序,否则就像数字一样?

Is there a way for sorting numbers with leading zeros like strings otherwise like numbers?

我在 postgres 14.1 数据库中有一个用于自然排序字符串的排序规则(provider = icu,locale = 'en-u-kn-true')。 NodeJS v12.16.1。当字符串具有非零前导数字(如 1 2 11 22)时,排序对我来说工作正常。如果数字以零开头,我会根据数字 [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