我有一个名为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