我有一個名爲date_created
的列,我希望每行都保留一個隨機日期,並且距當前時間爲-2天的日期邊界。用兩個日期之間的隨機日期時間更新每行
我正在運行下面的查詢,但它更新具有相同隨機日期的所有行。我希望每一行都是隨機的,而不是相同的。
update table set date_created=(select NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days')
任何想法將不勝感激。
我有一個名爲date_created
的列,我希望每行都保留一個隨機日期,並且距當前時間爲-2天的日期邊界。用兩個日期之間的隨機日期時間更新每行
我正在運行下面的查詢,但它更新具有相同隨機日期的所有行。我希望每一行都是隨機的,而不是相同的。
update table set date_created=(select NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days')
任何想法將不勝感激。
使用代替查詢表達式:
update my_table
set date_created= NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days'
是PostgreSQL優化子查詢,以便它只運行一次,導致相同的隨機值將用於所有行。要確保random()
對每行都運行一次,請使用表達式而不是子查詢。另外,您的計算可以簡化一點。
建議改進查詢:
UPDATE my_table SET date_created = now() - random() * INTERVAL '2 days'
嘿@markusk,也許只是告訴用戶爲什麼你的答案比他有更好的答案。我預計這可能並不總是產生一個獨特的價值。 now(),它基本上是隨機的 - 一個隨機數,可能產生之前已經產生的東西。 (10 - 2)==(11-3) –
@ anthony-horne原始問題並不要求所有的值都是唯一的,只是它們並不全都得到完全相同的值。正如klin指出的,這是由於使用子查詢來創建值。使用表達式來確保爲每一行使用一個新的隨機值,並且klin的答案被接受。 我的答案只是與目前接受的答案不同,因爲它更短,更易於閱讀。 – markusk
@ anthony-horne稍微闡述一下。 – markusk
你.. –
低於5000多少條記錄,它會保持不變? – user1411837