SAP HANA 随机数生成器

SAP HANA random number generator

我想编写一个语句,从一组四个值(2、4、6 和 8)中随机选择一个值。以下是我目前的 select 声明

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

有没有更智能的方法?

在我看来,你的要求似乎可以满足,但他的说法

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() 函数.

就是这样。从 (2, 4, 6, 8).

集合中选取的随机数

您可以使用

对数据集进行随机排序

按兰德排序()

和select第一个作为你的随机值

这是一个例子

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

Numbers_Table 函数 returns a numbers table on HANA database 并且我使用 WHERE 子句

仅过滤您希望看到的可能随机值的值

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

希望对你有帮助