Функция 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
HEX обрабатывает VARBINARY до 16k :
с максимальной длиной 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.