我想在BigQuery中得到0到9之间的随机整数。我试过经典的
SELECT CAST(10*RAND() AS INT64)但它产生的数字介于0到10之间
添加这个问题可能会让习惯于在大多数其他语言中使用CAST执行TRUNC的程序员感到意外。
注意这种奇怪的结果分布:

发布于 2017-09-21 06:37:13
更新2019年:
现在你可以这么做了:
SELECT fhoffa.x.random_int(0,10)要获得0到n之间的随机整数(在本例中为9),需要在FLOOR之前使用CAST
SELECT CAST(FLOOR(10*RAND()) AS INT64)这是因为Standard没有指定CAST到integer应该是TRUNC还是ROUND抛出的浮点数。BigQuery标准SQL实现选择ROUND,因此CAST的经典公式不能按预期工作。确保指定要FLOOR (或TRUNC)随机数,然后指定CAST (以获得INT64而不是FLOAT)。
来自SQL标准:
每当将精确或近似的数值分配给精确数值站点时,其值在舍入或截断后保持前导重要数字的近似表示为目标的声明类型。该值被转换为具有目标的精度和规模。是截断还是循环的选择是实现定义的。 https://github.com/twitter/mysql/blob/master/strings/decimal.c#L42
发布于 2017-09-21 18:34:04
另一个选择是
SELECT MOD(CAST(10*RAND() AS INT64), 10)https://stackoverflow.com/questions/46337033
复制相似问题