不同于Go和PostgreSQL的排序顺序
对文本数组进行排序的SQL查询不同于Go和PostgreSQL的排序顺序,go,psql,Go,Psql,对文本数组进行排序的SQL查询 SELECT unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) ORDER BY 1 ASC; unnest --------- [Alpha] [Bravo] Delta Go Gopher Grin GO代码对字符串数组进行排序 为什么结果不同?在SQL查询中,您可以取消数组的设置。这似乎给出了一个排序顺序,没有或忽略了[和] 在围棋中,方形前导括号被视
SELECT unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) ORDER BY 1 ASC;
unnest
---------
[Alpha]
[Bravo]
Delta
Go
Gopher
Grin
GO代码对字符串数组进行排序
为什么结果不同?在SQL查询中,您可以
取消数组的设置。这似乎给出了一个排序顺序,没有或忽略了[
和]
在围棋中,方形前导括号被视为弦的一部分。这两个函数似乎都是按字典顺序排序的。Go似乎使用“ascii”排序
您可以在Postgres中使用collate“C”
实现这一点:
SELECT word
from unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) as t(word)
ORDER BY word collate "C" ;
对sql似乎忽略了“['']”。任何原因,为什么sql会这样做way@MadhuSudhanCS:它不会“忽略”它们,它们只是排序在其他字符之前。排序规则设置可能是什么?例如,在我的机器上,postgres输出与Go的输出匹配。参见:显示信用证核对;lc\U collate--------en\u US.UTF-8
我的collate设置与你的相同。很好!TILcollate
SELECT word
from unnest(ARRAY['Go', '[Bravo]', 'Gopher', '[Alpha]', 'Grin', 'Delta']) as t(word)
ORDER BY word collate "C" ;