Postgres字符串与前导空格的比较

时间:2019-03-24 07:28:43

标签: postgresql postgresql-9.5

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

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

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

2 个答案:

答案 0 :(得分:0)

尝试:

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

我已经使用postgres 11进行了测试,并且可以正常工作。参见documentation

答案 1 :(得分:0)

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

  

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

     

当数据库系统必须执行排序或字符分类时,它将使用输入表达式的排序规则。例如,这发生在ORDER BY子句和函数或运算符调用(例如<)上。申请ORDER BY子句的排序规则只是排序键的排序规则。申请函数或运算符的排序规则是从参数中得出的,如下所述。除比较运算符外,在小写和大写字母(例如小写,大写和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;查看可用的排序规则。