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

Database Postgresql-使用特殊字符、数字和字母对字符字段进行排序,database,postgresql,sorting,sql-order-by,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 Adve

我的一个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

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

select * from adv_names order by "name" collate "POSIX";
它可以归结为这样一个问题:在哪些排序规则是在数字之前排序的特殊字符?我不认为任何排序规则是这样工作的,但我可能错了。(在我工作的地方,我不必考虑太多排序规则。)

要查看哪些排序规则对您可用,请运行此命令

select * from pg_collation;

必要时,您可以创建自己的排序规则。看见我不确定这对你有用。这取决于操作系统支持和PostgreSQL构建选项。

它当然提供了一个方向。关于我的期望…基本上我有两个来源来提取我的报告。一个是基于sql server的,另一个是Postgres。Sql Server按照我的期望返回输出,因此我正在Postgres中尝试一种类似的方法。您可能还需要确定其字符编码。然后试着找出Linux上的哪个联盟做同样的事情。(我假设postgres SQL在Linux上运行。)是的,postgres在Linux上。谢谢我将保留Posted更新是SQL server与Postgres SQL之间没有精确的排序规则匹配,后者根据我的要求进行排序。对于我的问题,我做了客户端排序,这也有一些限制,但我现在还可以。你的答案对这个问题是正确的。所以我会把它标记为正确答案。谢谢你的帮助。