在SQLite中
该
random()函数返回-9223372036854775808和+9223372036854775807之间的伪随机整数.
您可以随机获得最大值为n的随机数 Select random() % n ;
但这仍然会产生负数.如何在SQLite中只生成正的随机数?
Nul*_*ion 22
使用ABS()(绝对值)函数:
SELECT ABS(RANDOM() % N)
Run Code Online (Sandbox Code Playgroud)
注意:
如果X是整数-9223372036854775808,则
abs(X)抛出整数溢出错误,因为没有等效的正64位二进制补码值.
您random() % n在一定范围内获取随机数的方法有缺陷,因为它会产生不均匀分布。数字零出现的频率是任何其他数字的两倍。
顺便说一句,使用ABS使数字为正的方法存在完全相反的缺陷,使数字 0 出现的频率是任何其他数字的一半,因此它们相互抵消。
abs(random() % n)
Run Code Online (Sandbox Code Playgroud)
要生成仅具有上限的正(包括零)随机数,请使用
SELECT ABS(RANDOM() % N)
Run Code Online (Sandbox Code Playgroud)
要生成正数和非零随机数,请使用
SELECT ABS(RANDOM()) % (HIGH - LOW) + LOW
Run Code Online (Sandbox Code Playgroud)
HIGH-代表上限
LOW-表示下限。