gpt4 book ai didi

postgresql - Postgres Varchar 比较文档?

转载 作者:行者123 更新时间:2023-11-29 13:00:04 30 4
gpt4 key购买 nike

我有一个 varchar 字段,它有一个由字符串组成的键,有时它有一些模式,以名称和时间戳开头。

我想支持删除具有给定前缀的旧记录,并且我想运行类似 DELETE FROM table WHERE key < %s 的查询,但我想确切地知道我在做什么。我找不到任何关于这应该如何工作的官方文档。它们存在吗?我发现 Practical Postgres 一书提到它是基于字母顺序的,但我不确定在任何官方文档中是否仍然如此。除了四处摸索之外,还有什么最新消息可以引用吗?

最佳答案

字符串根据 libc strcmp function 执行的词法比较进行排序。 ,使用由指定的排序规则,按优先顺序降序排列:

  • 运算符上的显式 COLLATEORDER BY
  • 列上指定的任何COLLATE
  • 数据库的默认LC_COLLATE

(以上是凭内存,查手册100%确定)。

因此,顺序会因您所在的地区而异。例如,在某些语言环境中,标点符号和/或空格会被忽略,并且按大小写排序也会有所不同。

您可以使用 COLLATE "C" 覆盖数据库的默认排序顺序,并按字符串的简单字节顺序进行排序。

所有字符串排序(无论是否使用语言环境排序规则)都是“愚蠢的”,因为它们无法识别数字、日期等。排序顺序不是人类通常选择的顺序。例如:

SELECT i
FROM generate_series(0,22) i
ORDER BY i::text COLLATE "C";

会发出

1
11
2
...

类似地:

SELECT d
FROM (
VALUES
('2001'),
('2000 A.D.'),
('600 B.C.')
) x(d)
ORDER BY d;

产生

 2000 A.D.
2001
600 B.C.

因此,如果您想要自然的或人性化的排序,则需要变得更加复杂 - 拆分字段并对每个部分进行排序。见:

关于postgresql - Postgres Varchar 比较文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32898656/

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