KB2*_*B22 87 sql random postgresql
由于我在这个问题中处理的测试查询方法没有成功,我现在正在尝试别的东西.有没有办法告诉pg的random()
功能只给我1到10之间的数字?
小智 140
如果数字介于1和10之间,则表示任何浮点数> = 1且<10,那么很容易:
select random() * 9 + 1
Run Code Online (Sandbox Code Playgroud)
这可以通过以下方式轻松测试:
# select min(i), max(i) from (
select random() * 9 + 1 as i from generate_series(1,1000000)
) q;
min | max
-----------------+------------------
1.0000083274208 | 9.99999571684748
(1 row)
Run Code Online (Sandbox Code Playgroud)
如果你想要整数,> = 1和<10,那么它很简单:
select trunc(random() * 9 + 1)
Run Code Online (Sandbox Code Playgroud)
再次,简单的测试:
# select min(i), max(i) from (
select trunc(random() * 9 + 1) as i from generate_series(1,1000000)
) q;
min | max
-----+-----
1 | 9
(1 row)
Run Code Online (Sandbox Code Playgroud)
qd3*_*d3v 13
总结和简化,您可以使用:
-- 0 - 9
select floor(random() * 10);
-- 0 - 10
SELECT floor(random() * (10 + 1));
-- 1 - 10
SELECT ceil(random() * 10);
Run Code Online (Sandbox Code Playgroud)
你可以像@ user80168一样测试这个
-- 0 - 9
SELECT min(i), max(i) FROM (SELECT floor(random() * 10) AS i FROM generate_series(0, 100000)) q;
-- 0 - 10
SELECT min(i), max(i) FROM (SELECT floor(random() * (10 + 1)) AS i FROM generate_series(0, 100000)) q;
-- 1 - 10
SELECT min(i), max(i) FROM (SELECT ceil(random() * 10) AS i FROM generate_series(0, 100000)) q;
Run Code Online (Sandbox Code Playgroud)
如果您使用的是SQL Server,那么正确的方法是获取整数
SELECT Cast(RAND()*(b-a)+a as int);
Run Code Online (Sandbox Code Playgroud)
哪里
归档时间: |
|
查看次数: |
119226 次 |
最近记录: |