SAP HANA随机数生成器

时间:2018-09-11 14:42:10

标签: sql hana

我想写一条语句,该语句从一组四个值(2、4、6和8)中生成一个随机选择。以下是我到目前为止的选择语句

SELECT
CASE 
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 0 AND 2.00 THEN 2 
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 2.01 AND 4.00 THEN 4
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 4.01 AND 6.00 THEN 6
WHEN RN_GENERATOR.RANDOM_NUMBER BETWEEN 6.01 AND 8.00 THEN 8
END     AS ORDER_FREQUENCY
FROM (SELECT ROUND(RAND()*8,2) AS RANDOM_NUMBER FROM DUMMY) RN_GENERATOR

有没有更聪明的方式做到这一点?

2 个答案:

答案 0 :(得分:0)

在我看来,您的要求可以满足,但他的声明

select
        ROUND(rand()*4, 0, ROUND_CEILING) * 2 as ORDER_FREQUENCY
from dummy;

RAND() * 4RAND()函数可能结果的值范围从0..1扩展到0..4。

ROUND( ... , 0, ROUND_CEILING)将数字四舍五入到下一个更大或相等的整数,并且不保留小数位。对于此示例,这意味着此舍入的输出只能是1、2、3或4。

*2只需将四个可能的值映射到您的目标数字范围2、4、6、8。如果乘法不能满足要求,则还可以使用MAP()函数。 / p>

就是这样。从(2, 4, 6, 8)的集合中选取随机数。

答案 1 :(得分:0)

您可以使用

对数据集进行随机排序

ORDER BY Rand()

并选择第一个作为您的随机值

这是一个例子

select top 1 rownum 
from Numbers_Table(10) as nt 
where rownum in (2,4,6,8)
order by rand();

Numbers_Table函数返回一个numbers table on HANA database,我使用WHERE子句仅过滤您希望看到的可能的随机值

SELECT命令中的TOP 1子句返回第一个随机排序的整数

我希望对您有帮助