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

How to sort numbers last in 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'), ('ABC123')) 
select a from v order by a; 
   a    
--------
 123abc
 abc123
 ABC123
(3 rows)