如何在PostgreSQL中对数字进行最后排序?

问题描述

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

最后如何按数字排序:

AA
ZZ
11
55

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

AA
A1
A2

Postgresql 11.9

此外,出于性能考虑,可能不想使用正则表达式。也不想创建索引...

解决方法

我认为正则表达式是执行此操作的正确方法:

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

这将首先放置完全不包含数字的行,然后放置其余行。在每个组中,行按升序排序。

,

您可以创建一个排序规则来为您执行此操作并将其用于此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')) 
select a from v order by a; 
   a    
--------
 123abc
 abc123
 ABC123
(3 rows)


相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...