以下查询
SELECT * FROM (VALUES('c'), ('a'), ('b'), ('"a"')) X ORDER BY 1 ASC
产生
a
"a"
b
c
那么"a"
会出现在a
之后,即使它以非字母字符(例如"
)开头吗?
我认为输出应该是
"a"
a
b
c
似乎PostgreSQL在对这些值进行排序时正在剥离非字母字符,但这对我来说没有意义。
答案 0 :(得分:3)
文本(char,varchar,text)的排序行为取决于区域设置的当前排序规则。尝试使用,
SELECT *
FROM (VALUES('c'), ('a'), ('b'), ('"a"')) X(col)
ORDER BY col COLLATE "C" asc;
“ C”排序规则是按字节排序的排序规则,它忽略了本国语言规则,编码等。
答案 1 :(得分:0)
在VALUES行值构造函数中,对文字的排序规则进行了一些“有趣”操作,但是如果您使用“真实”表,则查询将按预期进行排序:
CREATE TABLE T (StringCol VARCHAR(5));
INSERT T Values ('a'),('b'),('c'),('"a"');
SELECT * FROM T ORDER BY 1
我快速浏览了this topic,但是找不到明显的原因,需要更深入的阅读,但是您应该在那找到答案。
HTH