【发布时间】:2020-09-01 15:25:07
【问题描述】:
找到许多相关的答案,但没有这样做。
如何按数字最后排序:
AA
ZZ
11
55
而且,最好(但不是必须的)
AA
A1
A2
PostgreSQL 11.9
另外,出于性能原因,可能不想使用正则表达式。也不想创建索引...
【问题讨论】:
标签: sql string postgresql sql-order-by postgresql-11
找到许多相关的答案,但没有这样做。
如何按数字最后排序:
AA
ZZ
11
55
而且,最好(但不是必须的)
AA
A1
A2
PostgreSQL 11.9
另外,出于性能原因,可能不想使用正则表达式。也不想创建索引...
【问题讨论】:
标签: sql string postgresql sql-order-by postgresql-11
我认为正则表达式是这样做的正确方法:
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)
【讨论】: