【发布时间】:2020-10-28 17:38:58
【问题描述】:
如何替换Postgres中Oracle的ORA_HASH函数?我希望实现已写入 Oracle 的批处理和合并逻辑,同样我希望将其实现到 Postgres 中。
SELECT DISTINCT ACCNT_TYPE,ACCNT_SUB_TYPE,ACCNT_FROM_VAL,ACCNT_TO_VAL AS T_ACCNT_TO_VAL,
ORA_HASH("NAME"||TO_CHAR(LIFECYCLE_DATE,'DD-MM-YYYY HH24:MI:SS')||LEGACY_ICA_TYPE||TO_CHAR(PURGE_DATE,'DD-MM-YYYY HH24:MI:SS')
||HUB_STATE_IND||LIFECYCLE_STATUS_CD||VAT_ID||LICENSED_SW||PRIMARY_ICA||TOKEN_ACCT_SRV_DESC) AS HASH_VAL
FROM C_ACCNT
ORA_HASH 中提到的所有字段都用于评估是否应该执行 INSERT 是否应该通过考虑所有这些字段来完成 UPSERT。
几乎相同的查询,但表名不同,左外连接。此外,如果 HASH VALUE 不同,则会考虑使用 UPSERT。
为什么这个查询总是给我空响应?
select md5(p.src_id || p.type || p.accountName)
FROM ACCOUNT p;
如果类型值为 NULL 则为 DB,则 md5 结果为 NULL。这很糟糕。
【问题讨论】:
-
在 PostgreSQL 中,您可以使用
md5()。它与 ORA_HASH() 不完全相同,但它会做几乎相同的事情。 -
我在发布问题之前浏览了所有这些链接,请参阅我更新的帖子。
-
@a_horse_with_no_name - 不,这不能解决我的问题。请不要关闭问题。
-
“为什么这个查询总是给我空响应?” - 因为其中一列是空的。 Oracle 对空字符串和 NULL 值的行为不同。您可以使用
concat()代替在 Postgres 中将 NULL 值视为空字符串