我有有由,有时有一定的模式给它,它与一个名字&时间戳开头的字符串的密钥的VARCHAR字段。Postgres Varchar比较文档?
我想支持删除具有给定前缀的旧记录,并且我想运行一个查询,如DELETE FROM table WHERE key < %s
,但我想知道我到底在干什么。我无法找到任何关于这应该如何工作的官方文档。它们存在吗?我发现实用的Postgres本书,提到它是基于按字母顺序排列,但我不知道这是仍处于任何官方文件属实。有没有什么最新的,我可以参考,而不是我的戳?
我有有由,有时有一定的模式给它,它与一个名字&时间戳开头的字符串的密钥的VARCHAR字段。Postgres Varchar比较文档?
我想支持删除具有给定前缀的旧记录,并且我想运行一个查询,如DELETE FROM table WHERE key < %s
,但我想知道我到底在干什么。我无法找到任何关于这应该如何工作的官方文档。它们存在吗?我发现实用的Postgres本书,提到它是基于按字母顺序排列,但我不知道这是仍处于任何官方文件属实。有没有什么最新的,我可以参考,而不是我的戳?
的字符串进行排序基于如由libc strcmp
function进行,使用由指定的整理,以优先递减顺序词法比较:
COLLATE
或ORDER BY
COLLATE
指定在列LC_COLLATE
(以上内容来自内存,请检查手册100%确定)。
这样的排序变化的基础上您的语言环境。例如,在某些语言环境中,标点符号和/或空白符被忽略,并且按大小写排序也各不相同。
您可以使用COLLATE "C"
来覆盖DB和排序字符串的简单的字节顺序默认的排序顺序。
所有字符串排 - 与语言环境排序规则或不 - 是“愚蠢的”,因为他们不认识数字,日期等的排列顺序是不是有什么人会通常选择。例如:
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.
,所以如果你想有一个自然的,或人源化,排序,你”你需要变得更加复杂 - 分裂字段和排序每个部分。请参阅:
这个网站是不是要求对外部资源的引用。相反,请重新提出您的问题,以举例说明您拥有的数据,希望您想要删除的内容以及要保留的内容。 – Patrick
我认为这是一个很好的问题,手册确实缺乏这方面的信息。但我同意这是无关紧要的。你应该张贴此Postgres的邮件列表:http://www.postgresql.org/list/一言以蔽之:比较是取决于归类中使用:http://www.postgresql.org/docs/9.4/static /collation.html –