Random 如何在BigQuery中获取随机整数?
我想在BigQuery中获得一个介于0和9之间的随机整数。我试过经典的Random 如何在BigQuery中获取随机整数?,random,google-bigquery,Random,Google Bigquery,我想在BigQuery中获得一个介于0和9之间的随机整数。我试过经典的 SELECT CAST(10*RAND() AS INT64) 但它产生的数字在0到10之间 将此问题添加为结果可能会让习惯于用大多数其他语言执行TRUNC的程序员大吃一惊 请注意这种奇怪的结果分布: 2019年更新: 现在您可以这样做: SELECT fhoffa.x.random_int(0,10) () 要获得0到n之间的随机整数(在本例中为9),您需要在CAST之前FLOOR: SELECT CAST(FLOO
SELECT CAST(10*RAND() AS INT64)
但它产生的数字在0到10之间
将此问题添加为结果可能会让习惯于用大多数其他语言执行TRUNC
的程序员大吃一惊
请注意这种奇怪的结果分布:
2019年更新: 现在您可以这样做:
SELECT fhoffa.x.random_int(0,10)
()
要获得0到n之间的随机整数(在本例中为9),您需要在
CAST
之前FLOOR
:
SELECT CAST(FLOOR(10*RAND()) AS INT64)
这是因为SQL标准没有指定如果CAST
为整数,则应TRUNC
或ROUND
所转换的浮点。BigQuery标准SQL实现选择取整
,因此带有强制转换
的经典公式将无法按预期工作。确保指定您希望FLOOR
(或TRUNC
)您的随机数,然后CAST
(以获得INT64
而不是FLOAT
)
从SQL标准:
每当将精确或近似的数值指定给
精确数值站点,其值的近似值
舍入或截断后保留前导有效数字
在目标的声明类型中表示。价值是
转换为具有目标的精度和比例选择
是截断还是取整由实现定义
另一个选择是
选择MOD(强制转换(10*RAND()为INT64),10)