我有以下语句select random() * 999 + 111 from generate_series(1,10)
这导致:
690,046183290426
983,732229881454
1091,53674799064
659,380498787854
398,545482470188
775,65887248842
1044,79942638567
173,288027528208
584,690435883589
522,077123570256
如你所见;两个值超过 999!
这个工作正常: select random() * 9 + 1 from generate_series(1,10)
我的系统是:PostgreSQL 9.3.5 on x86_64-unknown-linux-gnu,由 gcc 编译(Ubuntu 4.8.2-19ubuntu1) 4.8.2,64 位
这是一个错误吗?
不,这不是错误。表达式 random() * 999
为您提供一个从 0
到 999
(含)的数字。
添加一个将为您提供一个数字 1
到 1000
.添加111
将为您提供一个111
到1110
的数字。因此,除了看到一些超过一千的值外,您还将看到一百一十一以下的值。
您的错误似乎是假设,当您使用999
而不是9
时,您必须添加111
而不是1
。事实并非如此。要获得1
到1000
的数字,您需要:
random() * 999 + 1
不,这不是错误。
random
生成一个范围为 [0.0, 1.0] 的数字。将其乘以 999,得到一个 [0.0, 999.0] 范围内的数字。将 111 相加,您有一个介于 [111.0, 1110.0] 范围内的数字。
事实上,给定random
均匀分布,大约有11%的机会得到大于999的数字。你所描述的结果不仅是可能的,而且是意料之中的。