sql – 将串联与ORDER BY结合使用
我在Postgre(9.1.9)中将连接与顺序结合起来遇到了麻烦.
比方说,我有一个包含3个字段的表格边框: Table "borders" Column | Type | Modifiers ---------------+----------------------+----------- country1 | character varying(4) | not null country2 | character varying(4) | not null length | numeric | 前两个字段是国家的代码,第三个字段是这些国家之间的边界长度. 我需要编写一个列的选择,该列将具有整个表的唯一值,此外,应按降序选择此列. 所以我运行以下查询: select country1||'_'||country2 from borders order by 1; 但是在结果中我看到排序中省略了’_’字符. ?column? ---------- A_CH A_CZ A_D AFG_IR AFG_PK AFG_TAD AFG_TJ AFG_TM AFG_UZB A_FL A_H A_I . . 您可以看到结果的排序就像字符串中不存在“_”一样. 如果我使用一个字母(比如’x’)作为分隔符 – 订单是正确的.但我必须使用一些未出现在country1和country2字段中的特殊字符,以避免争用. 我应该怎么做,以便在排序过程中考虑’_’字符. 编辑 事实证明,连接与问题无关.问题是订单只是忽略’_’字符. 解决方法select country1 || '_' || country2 collate "C" as a from borders order by 1 sql fiddle demo 根据评论中的讨论说明: 1.)COLLATE“C”适用于ORDER BY子句,只要它通过位置参数或别名引用SELECT子句中的表达式即可.如果在ORDER BY中重复表达式,则还需要重复COLLATE子句,以便相应地影响排序顺序. sql fiddle demo 2.)在_不影响排序顺序的排序规则中,使用fog’s query更有效,更是如此,因为它使用现有索引(主键在前两个字段中定义). sql fiddle demo 查询性能(在Postgres 9.2中测试): PostgreSQL Collation Support in the manual. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |