Random 如何在BigQuery中获取随机整数?

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

我想在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(FLOOR(10*RAND()) AS INT64)
这是因为SQL标准没有指定如果
CAST
为整数,则应
TRUNC
ROUND
所转换的浮点。BigQuery标准SQL实现选择
取整
,因此带有
强制转换
的经典公式将无法按预期工作。确保指定您希望
FLOOR
(或
TRUNC
)您的随机数,然后
CAST
(以获得
INT64
而不是
FLOAT

从SQL标准:

每当将精确或近似的数值指定给 精确数值站点,其值的近似值 舍入或截断后保留前导有效数字 在目标的声明类型中表示。价值是 转换为具有目标的精度和比例选择 是截断还是取整由实现定义


另一个选择是

选择MOD(强制转换(10*RAND()为INT64),10)