2017-08-02 38 views
1

我有一個名爲date_created的列,我希望每行都保留一個隨機日期,並且距當前時間爲-2天的日期邊界。用兩個日期之間的隨機日期時間更新每行

我正在運行下面的查詢,但它更新具有相同隨機日期的所有行。我希望每一行都是隨機的,而不是相同的。

update table set date_created=(select NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days') 

任何想法將不勝感激。

+0

你.. –

+0

低於5000多少條記錄,它會保持不變? – user1411837

回答

2

使用代替查詢表達式:

update my_table 
set date_created= NOW() + (random() * (NOW()+'-2 days' - NOW())) + '-2 days' 
2

是PostgreSQL優化子查詢,以便它只運行一次,導致相同的隨機值將用於所有行。要確保random()對每行都運行一次,請使用表達式而不是子查詢。另外,您的計算可以簡化一點。

建議改進查詢:

UPDATE my_table SET date_created = now() - random() * INTERVAL '2 days' 
+0

嘿@markusk,也許只是告訴用戶爲什麼你的答案比他有更好的答案。我預計這可能並不總是產生一個獨特的價值。 now(),它基本上是隨機的 - 一個隨機數,可能產生之前已經產生的東西。 (10 - 2)==(11-3) –

+0

@ anthony-horne原始問題並不要求所有的值都是唯一的,只是它們並不全都得到完全相同的值。正如klin指出的,這是由於使用子查詢來創建值。使用表達式來確保爲每一行使用一個新的隨機值,並且klin的答案被接受。 我的答案只是與目前接受的答案不同,因爲它更短,更易於閱讀。 – markusk

+0

@ anthony-horne稍微闡述一下。 – markusk

相關問題