【发布时间】:2017-11-29 15:26:48
【问题描述】:
我们想要一个 SQL(不是 PL/pgSQL)函数,它给定一个任意大小的随机正整数,返回一个介于 0 和 999999 之间的整数。返回值应尽可能保留参数的随机性。
【问题讨论】:
-
如果你将 42 传递给函数两次,它是否应该两次返回相同的值?如果你传 42,我传 42,我们应该得到相同的值吗?
标签: sql postgresql integer truncate
我们想要一个 SQL(不是 PL/pgSQL)函数,它给定一个任意大小的随机正整数,返回一个介于 0 和 999999 之间的整数。返回值应尽可能保留参数的随机性。
【问题讨论】:
标签: sql postgresql integer truncate
在 PostgresSQL 中:
set seed 为下次调用 random 函数设置随机数:
setseed (arg)
此语句将生成 [0:999999] 范围内的数字
SELECT floor(random()*(999999-0+1))+10;
在 Python 中:
import random
def get_rand_int(arg)
random.seed(arg)
return random.randrange(0,100000)
使用随机时的注意事项
“Mersenne Twister 是现有测试最广泛的随机数生成器之一。但是,由于完全确定性,它并不适合所有用途,并且完全不适合加密用途。” https://docs.python.org/3/library/random.html?highlight=random#random.random
在 SQL 中:
这将使用 [seed] 作为种子值返回 999999 和 0 之间的下限整数。
SELECT FLOOR(RAND([seed])*(999999-0));
【讨论】:
rand() 的函数。它拥有的函数不带参数。也许是时候关注标签了。