【问题标题】:How to sort numbers last in PostgreSQL?如何在 PostgreSQL 中最后对数字进行排序?
【发布时间】:2020-09-01 15:25:07
【问题描述】:

找到许多相关的答案,但没有这样做。

如何按数字最后排序:

AA
ZZ
11
55

而且,最好(但不是必须的)

AA
A1
A2

PostgreSQL 11.9

另外,出于性能原因,可能不想使用正则表达式。也不想创建索引...

【问题讨论】:

    标签: sql string postgresql sql-order-by postgresql-11


    【解决方案1】:

    我认为正则表达式是这样做的正确方法:

    order by (col ~ '\d')::int, col
    

    这会放置根本不包含数字的第一行,然后是剩余的行。在每个组中,行按升序排列。

    【讨论】:

      【解决方案2】:

      您可以创建一个排序规则来为您执行此操作并将其用于此order by

      CREATE COLLATION digitslast (provider = icu, locale = 'en@colReorder=latn-digit');
      CREATE COLLATION
      
      with v (a) as (values ('123abc'), ('abc123'), ('ABC123')) 
      select a from v order by a collate "digitslast";
      
         a
      --------
       abc123
       ABC123
       123abc
      (3 rows)
      
      with v (a) as (values ('123abc'), ('abc123'), ('ABC123')) 
      select a from v order by a; 
         a    
      --------
       123abc
       abc123
       ABC123
      (3 rows)
      
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-11
        • 1970-01-01
        • 2021-09-10
        • 2015-08-31
        • 1970-01-01
        • 2021-12-11
        • 1970-01-01
        • 2023-03-15
        相关资源
        最近更新 更多