Postgresql-使用特殊字符,数字和字母对字符字段进行排序

时间:2019-05-31 13:07:37

标签: database postgresql sorting sql-order-by

我的一个Postgresql表中有以下数据。

name
-----------------
AdvertiserTest123  
Advertiser ADV 833  
:1Advertiser  
02 Advertiser  
MH Advertiser

当我查询为:Select * from adv_names order by name;

我得到的输出是

AdvertiserTest123  
Advertiser ADV 833  
:1Advertiser  
02 Advertiser  
MH Advertiser  

我希望排序的顺序是“特殊字符”的名称,然后是数字,然后是字母。如果我没看错,这就是它在Sql Server中的行为。

我尝试更改排序规则,并尝试了ascii搜索。它不符合我的期望。有人可以帮忙吗?

预期输出:

:1Advertiser  
02 Advertiser  
Advertiser ADV 833  
AdvertiserTest123  
MH Advertiser

1 个答案:

答案 0 :(得分:1)

这里真正的问题是您的期望是否合理。 SQL中文本值的排序由排序规则确定。在PostgreSQL中,您可以在运行查询时更改排序规则。

select * from adv_names order by "name" collate "POSIX";

可以归结为:在哪些排序规则中,特殊字符在数字之前排序?我不认为任何排序规则都可以这样工作,但是我可能是错的。 (我在工作的地方不需要对整理工作进行过多考虑。)

要查看可用的归类,请运行此。

select * from pg_collation;

在紧要关头,您可以创建自己的排序规则。参见create collation。我不确定这是否适合您。这取决于操作系统支持和PostgreSQL构建选项。