Database Postgresql-使用特殊字符、数字和字母对字符字段进行排序
我的一个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
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之间没有精确的排序规则匹配,后者根据我的要求进行排序。对于我的问题,我做了客户端排序,这也有一些限制,但我现在还可以。你的答案对这个问题是正确的。所以我会把它标记为正确答案。谢谢你的帮助。