以下是关于 PostgresQL 9.1 的:
我正在使用 right() 和 left() 字符串函数来修复一些将数据输入到我的数据库中的实例“相差一个”..所以我正在按照right(field1,1)||left(field2,-1
) 的方式做一些事情来获得正确的值等等. 在此过程中,我在 char(2) 列上遇到了意外结果。
如果我这样做SELECT RIGHT('A ',1)
,它会给我预期的' '
回报。
但是,如果我这样做SELECT RIGHT('A '::CHAR(2),1)
,它会给我'A'
.
为什么要这样做?这是一个错误吗?我试过SELECT RIGHT('A '::CHAR(3),1)
了,它也给出'A'
了结果。
CHAR
数据类型很糟糕。尽可能避免它,它的填充规则很疯狂。如果标准不需要支持它,PostgreSQL 根本不会支持它。目前尚不清楚这是预期行为还是错误。通常,前导空白
CHAR
在处理之前会被删除,我怀疑对于RIGHT
,Pg 正在从右侧删除空白,就好像这是 RTL 文本一样。我建议在 pgsql-general 上提出这个问题进行讨论。如果不出意外,它显然需要一份文档说明。