2017-06-26 83 views
1

我們需要一個給定任意大小的隨機正整數的SQL(而不是PL/pgSQL)函數,返回一個介於0,& 999999之間的整數。返回值應儘可能保留參數的隨機性。將整數截斷爲特定的位數?

+0

如果您通過42功能的兩倍,它應該返回兩次?如果您通過42的值相同,而我通過42,我們應該得到相同的值? –

回答

0

在PostgreSQL的:

組種子將隨機下次調用隨機函數時間:

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:

這將使用[種子]返回999999和0之間的地板的整數作爲種子值。

SELECT FLOOR(RAND([seed])*(999999-0)); 
+1

不錯!現在,你能在SQL中給出這個問題的答案嗎? – ma11hew28

+0

對不起,沒注意標籤,希望這個工作s給你。 –

+0

@ J.Clark:PostgreSQL沒有名爲'rand()'的函數。它*做的功能*沒有參數。也許是時候關注標籤了。 –