2017-08-02 41 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

相关问题