【问题标题】:How to replace ORA_HASH function of Oracle in Postgres?如何在 Postgres 中替换 Oracle 的 ORA_HASH 函数?
【发布时间】: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 值视为空字符串

标签: postgresql postgresql-9.6


【解决方案1】:

如果您只需要一个字符串的哈希函数,请使用 PostgreSQL 内置的hashtext

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多