- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Postgre (9.1.9) 中将串联与排序结合起来时遇到了麻烦。比方说,我有一个包含 3 个字段的表格边框:
Table "borders"
Column | Type | Modifiers
---------------+----------------------+-----------
country1 | character varying(4) | not null
country2 | character varying(4) | not null
length | numeric |
前两个字段是国家代码,第三个字段是这些国家之间的边界长度。
主键在前两个字段上定义。
我需要选择一个列,该列将对整个表具有唯一值,此外,应按降序选择该列。为此,我将关键字段与分隔符连接起来,否则两个不同的行可能会给出相同的结果,例如(AB、C 和 A、BC)。
所以我运行以下查询:
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 字段中的特殊字符,以避免争用。
为了在排序过程中考虑“_”字符,我应该怎么做。
原来是拼接与问题无关。问题是 order by 简单地忽略了 '_' 字符。
最佳答案
select country1 || '_' || country2 collate "C" as a
from borders
order by 1
根据评论中的讨论注释:
1.) COLLATE "C"
适用于 ORDER BY
子句,只要它引用 SELECT
子句中的表达式 < em>位置参数 或别名。如果您在 ORDER BY
中重复表达式,如果您想相应地影响排序顺序,则还需要重复 COLLATE
子句。
2.) 在 _
不影响排序顺序的归类中,使用 fog's query 效率更高,更是如此,因为它利用了现有索引(主键在前两个字段上定义
)。
但是,如果 _
有影响,则需要对组合表达式进行排序:
查询性能(在 Postgres 9.2 中测试):
sql fiddle demo
关于sql - 将连接与 ORDER BY 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706562/
我是一名优秀的程序员,十分优秀!