如何在postgresql中获取大于给定字符的最近字符?

如何在postgresql中获取大于给定字符的最近字符?,postgresql,character-encoding,locale,string-comparison,Postgresql,Character Encoding,Locale,String Comparison,我需要获取特定于区域设置的最接近的字符,该字符在字符串比较方面大于postgresql中给定的字符。我试着用 SELECT chr(ascii(x)+1); 但是当我测试它时,它有时不能以我想要的方式工作,例如 SELECT chr(ascii('я')+1); 返回ѐ,但是 SELECT 'я' < 'ѐ'; 返回FALSE。文本的排序顺序取决于lc\U collate,而不是ASCII码或Unicode码点。 在大多数地区,这些字符恰好与基本ASCII字符同时出现。其余的可能会有

我需要获取特定于区域设置的最接近的字符,该字符在字符串比较方面大于postgresql中给定的字符。我试着用

SELECT chr(ascii(x)+1);
但是当我测试它时,它有时不能以我想要的方式工作,例如

SELECT chr(ascii('я')+1);
返回ѐ,但是

SELECT 'я' < 'ѐ';

返回FALSE。

文本的排序顺序取决于lc\U collate,而不是ASCII码或Unicode码点。 在大多数地区,这些字符恰好与基本ASCII字符同时出现。其余的可能会有所不同

你的lc\U collate节目的输出是什么

您期望的行为仅适用于区域设置C。请阅读以下所有内容:

C和POSIX排序规则都指定了传统的C行为 只有ASCII字母A到Z被视为字母, 排序严格按照字符代码字节值进行


我的。PostgreSQL 9.1有两个新的排序功能。

在C/POSIX以外的其他语言环境中,如果不进行详尽的搜索,这通常是不可能的。你最好重新考虑一下你的要求


如果您在实践中只处理有限的问题空间,例如俄语或拉丁字母,我建议您在应用程序中的某个地方放置一个明确的字母列表。但是,如果您需要对任意Unicode字符或字符串执行此操作,您将遇到一些问题。

是ASCII吗?我相当肯定它不是。根据参数的第一个字符的规范ascii码,“ascii”函数必须返回非ascii字符的unicode数。对于UTF8,返回字符的Unicode代码点。对于其他多字节编码,参数必须是ASCII字符。对于UTF8,这是正确的。你的数据是UTF8吗?如果是这样的话,我应该先阅读文档:。不过,可以说,Postres应该在逻辑上命名它们的函数。lc\u collate------en\u US.UTF-8@Pupkov-扎德尼:这就是你的答案。我完全不知道如何获得特定于区域设置的下一个字符。文档可能会提供信息。因此,如果下一个字符不在语言环境C中,是否不可能只获取大于给定字符的下一个字符?o_o Update:对不起,没有看到你的评论…@Pupkov Zadnij:这肯定是有可能的,我只是不知道。顺便说一句,我的postgresql在尝试教程中使用COLLATE关键字的示例时出现语法错误。我的版本是8.4。