从多列创建哈希值

Creating hash value from multiple columns

我有一个产品销售示例 table,它由大约 15 列和几千行组成。我最感兴趣的列如下所示:

product_type     currency    amount    order_time               delivered_time
hoodie           GBP         60.0      2021-03-10  14:32:07     2021-03-13  16:05:52
shirt            EUR         30.0      2021-03-20  19:22:32     2021-03-24  11:18:46
...

目前有一个唯一标识符,但它对广泛分析没有用,一个订单中可以有多个产品,但它们都有不同的标识符,因此您无法将它们匹配起来。

我想做的是使用哈希函数创建一个新的标识符列,我使用了以下代码并展示了我得到的示例输出:

SELECT *, Md5(product_type||currency||amount)
FROM sales

product_type     currency    amount   identifier   
Coat             GBP         100.0    825be52c31f1d92584720466d743e2cf
Coat             GBP         100.0    825be52c31f1d92584720466d743e2cf

此代码适用于我包含在哈希函数中的 3 列,但我还想将两个 DATETIME 列包含在函数中,但它不起作用。我已经使用此代码尝试包含它们,代码运行但我得到的哈希值完成时彼此不同,即使列中的所有值都匹配:

SELECT *, Md5(product_type||currency||amount||TRUNC(order_time)||TRUNC(delivered_time))

我在两个日期列上使用了 TRUNC 函数,因为我不太关心确切的分钟或秒数,主要只对日期本身感兴趣。如何在不弄乱哈希函数的情况下包含两个日期时间列?

使用to_char(date, 'YYYY-MM-DD')代替TRUNC()

 Md5(product_type||currency||amount||to_char(order_time,'YYYY-MM-DD')||to_char(delivered_time,'YYYY-MM-DD'))

或者如果数据类型是 string/varchar,使用 SUBSTRING(date,1,10)

Md5(product_type||currency||amount||SUBSTRING(order_time,1,10)||SUBSTRING(delivered_time,1,10))