Postgres String与领先空间的比较

问题描述 投票:1回答:2

我希望Postgres在进行字符串比较时将前导空格作为字符串的一部分包含在内。但是,在9.5版本中并非如此。

select ' s' > 'ny';
 ?column?
----------
 t
(1 row)

我希望这返回false,我认为它应该是因为空间的ASCII值小于'n'。是否有一些设置要更改,以便这可以返回false?

postgresql postgresql-9.5
2个回答
0
投票

试试:

select ' s'::bytea > 'ny'::bytea;

我已经用postgres 11测试了它的确有效。见documentation


0
投票

https://www.postgresql.org/docs/current/collation.html

排序规则功能允许指定每列数据的排序顺序和字符分类行为,甚至是每个操作。 ...

当数据库系统必须执行排序或字符分类时,它使用输入表达式的排序规则。例如,使用ORDER BY子句和函数或运算符调用(例如<)会发生这种情况。申请ORDER BY子句的排序规则只是排序键的排序规则。应用函数或操作符调用的排序规则从参数派生,如下所述。除了比较运算符之外,还可以通过在小写字母和大写字母之间进行转换的函数来考虑排序规则,例如lower,upper和initcap;通过模式匹配运算符;以及to_char和相关功能。

不同整理行为的示例:

postgres=# select ' s' > 'ny' collate "en_GB.utf8";
?column? 
----------
t
(1 row)

postgres=# select ' s' > 'ny' collate "C";
?column? 
----------
f
(1 row)

SELECT * FROM pg_collation;查看可用的排序规则。

© www.soinside.com 2019 - 2024. All rights reserved.