PL / SQL通过随机ora_hash设置精确长度

时间:2016-08-11 09:00:31

标签: hash plsql

我正在使用ora_hash获取一个看起来像这样的随机哈希。

SELECT ORA_HASH (userID || SYSTIMESTAMP || SYS_GUID ()) AS hash 
FROM DUAL;

userID是一个5位数的nNumber。 我已经测试了很长时间,并注意到它生成了一个长度在7到10位之间的数字。

现在我想知道是否有一种很好的方法来创建一个总是包含10位数的哈希值,意味着一个介于1000000000和9999999999之间的数字。

或者我应该从长度到数字10的差异并计算它?什么是最好的方式。

2 个答案:

答案 0 :(得分:1)

你也可以修改你的查询以获得10位数的结果。可能你可以使用如下:

select case when length(hash_val)> 10 then
           substr(hash_val,1,10)
           when length(hash_val) < 10 then
           lpad(hash_val,10,abs(dbms_random.random))
           else
           to_char(hash_val)
        end          
from (     
SELECT ORA_HASH ('00000' || SYSTIMESTAMP || SYS_GUID ()) AS hash_val 
FROM DUAL );

答案 1 :(得分:0)

foreach($responses->value->messageTaskList as $key => $value) {

      echo $value->id . ", " . $value->text . "<br>";

}

应该做的伎俩(不会达到9999999999,因为ora_hash只能达到4294967295,所以+1000000000最多可以达到5294967295)