DB2 BLOB 如何执行 MD5?



当我使用HASH函数时,sysibm.hex(sysibm.hash(NAME,0((是正常的,但如果"NAME"是BLOB或CLOB,则不是。 我没有找到关于支持的答案。我的 MD5 使用错误吗?

Db2 11.5

VALUES HASH(BLOB('1',0)) --it's ok.
VALUES HEX(HASH(BLOB('1',0))) --it's wrong

我希望斑点是 md5

HASH 函数需要字符串表达式作为输入:

表示要进行哈希处理的字符串值的表达式。此表达式必须返回内置字符串、图形字符串、二进制字符串、数值、布尔值或日期时间值。如果该值不是字符、图形或二进制字符串,则在计算函数之前将其隐式强制转换为 VARCHAR。

所以涉及到一些隐式的选角。我相信这可能是返回的 VARBINARY 的长度:

$ db2 "describe values hash('a',0)"
Column Information
Number of columns: 1
SQL type              Type length  Column name                     Name length
--------------------  -----------  ------------------------------  -----------
908   VARBINARY                64  1                                         1
$ db2 "describe values hash(blob('a'),0)"
Column Information
Number of columns: 1
SQL type              Type length  Column name                     Name length
--------------------  -----------  ------------------------------  -----------
908   VARBINARY             32672  1                                         1

十六进制处理高达 16k 的 VARBINARY:

最大长度为 16 336 字节。

所以这失败了:

db2 "values hex(hash(blob('a'),0))"
SQL0171N  The statement was not processed because the data type, length or 
value of the argument for the parameter in position "1" of routine 
"SYSIBM.HEX" is incorrect. Parameter name: "".  SQLSTATE=42815

但是如果我们把它修剪下来,那就没问题了:

db2 "values hex(substr(hash(blob('a'),0),1,16) )"
1                               
--------------------------------
0CC175B9C0F1B6A831C399E269772661
1 record(s) selected.

你可以试试这个:

HEX(CAST(HASH(BLOB('1'),0) as VARBINARY(128)))

最新更新