如何解决如何在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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。