0

我们正在使用 AWS DMS 将 DB2 数据迁移到 PostgreSQL 11.x,我们在 db2 中有带尾随空格的 varchar 字段,并且没有任何 TRIM,当我们在 WHERE 子句中使用这些字段时,这些字段可以正常工作。我认为 DB2 在内部修剪它们,因为这些是 varchar 字段。但是在迁移到 PostgreSQL 之后,这些字段在没有 TRIM 的情况下无法工作,而且有时即使您使用 TRIM,这些字段也会产生意想不到的结果。下面是详细的问题。

来源:DB2 - RECIP_NUM-- VARCHAR(10)--'ST001 '

select RECIP_NUMBER, SERV_TYPE, LENGTH(SERV_TYPE) AS before_trim_COL_LENGTH, LENGTH(trim(SERV_TYPE)) AS after_trim_COL_LENGTH
from serv_type rst
WHERE SERV_TYPE = 'ST001' -- THIS WORKS FINE WITHOUT TRIM 

输出:DB2 的输出

目标:PGSQL -- RECIP_NUM-- VARCHAR(10)--'ST001 '

select RECIP_NUMBER, SERV_TYPE, LENGTH(SERV_TYPE) AS COL_LENGTH 
from serv_type rst
WHERE trim(SERV_TYPE) = 'ST001' -- THIS IS NOT GIVING ANY OUTPUT WITHOUT TRIM

输出:PostgreSQL 的输出

有什么方法可以告诉 PostgreSQL 忽略 VARCHAR 列的尾随空格?

4

1 回答 1

1

Postgres 不遵循 SQL 标准,在比较VARCHAR或字符串时需要填充较短的TEXT字符串;它只填充CHAR琴弦。因此,您可以使用它...WHERE SERV_TYPE::char = 'ST001'::char来模拟 Db2 行为。请注意,这将排除使用 index on SERV_TYPE,与使用时相同trim(SERV_TYPE)

于 2020-12-30T17:52:43.713 回答