DB2数据库中rand()和hex()函数的运行原理

今天在db2数据库中新增数据,想要生成UUID作为这条数据的主键,网上搜了一下给出的方法是lower(hex(rand())||hex(rand())),生成32位的UUID。新增完数据后,忍不住深究了一下,rand()是生成0到1中的随机数,小数位数不固定;hex()是将字符串的值用16进制表示(不太明白这个函数,字符串的值是指什么?)。我先是在db2数据库中运行了一下hex(rand()),发现它生成的都是16位的16进制数;之后我又用rand()随机生成了一些数,得到的数中有十八位的小数有十九位的小数,我再把得到的这些数分别放进hex()函数中,发现生成的16进制数有十六位的有十八位的还有二十位的。这我就不明白了,上面两种方式不应该是等价的吗?为什么结果却不一样?hex()函数的运行机制到底是怎么样的?还有hex()是将字符串的值转换成16进制,而rand()生成的却是浮点数,运行时是现将浮点数转换成字符串再进行处理吗?还有字符串的值是什么,是各个字符对应的编码拼在一起?求大神解答小白的问题,多谢了!

应该是字符的值,比如A 字母,ASCII值是65,16进制就是0x41