gpt4 book ai didi

Postgresql ORDER BY 没有按预期工作

转载 作者:行者123 更新时间:2023-12-05 01:58:08 28 4
gpt4 key购买 nike

让我们用这个简单的例子来说明我面临的问题。

假设这张表:

CREATE TABLE testing1
(
id serial NOT NULL,
word text,
CONSTRAINT testing1_pkey PRIMARY KEY (id)
);

和数据:

insert into testing1 (word) values ('Heliod, God');
insert into testing1 (word) values ('Heliod''s Inter');
insert into testing1 (word) values ('Heliod''s Pilg');
insert into testing1 (word) values ('Heliod, Sun');

然后我想运行此查询以获取按 word 列排序的结果:

SELECT
id, word
FROM testing1
WHERE UPPER(word::text) LIKE UPPER('heliod%')
ORDER BY word asc;

但是看看输出,它不是有序的。我希望行按该顺序排列,使用它们的 ID:2、3、1、4(或者,如果我使用单词的值:Heliod's InterHeliod's Pilg, Heliod, God, Heliod, Sun).这是我得到的:

query 1

我认为由于我使用的 WHERE 标准,可能有些东西会混淆 postgresql,但如果我只是按行排序,则会发生以下情况:

query 2

我是不是漏掉了什么?我在文档中找不到任何关于对包含引号的值进行排序的内容(我怀疑引号会导致这种行为,因为它们在 postgresql 中具有特殊含义,但我可能是错的)。

我正在为我的数据库使用 UTF-8 编码(虽然不确定它是否重要)并且这个问题发生在 Postgresql 版本 12.7 上。

的输出显示 lc_ctype;

"en_GB.UTF-8"

和输出显示 lc_collat​​e;

"en_GB.UTF-8"

最佳答案

这是对 en_US.UTF-8 中的行进行排序的正确方法。它用标点符号和空格做“奇怪的”(对习惯 ASCII 的人来说)事情,跳过第一遍,只考虑其他绑定(bind)的值。

如果您不需要这些规则,可以改用 C 排序规则。

关于Postgresql ORDER BY 没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68696920/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com