sql在两个日期之间随机更新
Posted
技术标签:
【中文标题】sql在两个日期之间随机更新【英文标题】:sql update random between two dates 【发布时间】:2014-01-13 13:47:10 【问题描述】:我已尝试更新我的数据库并更改日期。我做了一些研究,但没有发现任何问题。所以我用了两个时间戳。
我尝试过这种方法:
UPDATE `ps_blog_post`
SET `time_add` = ROUND((RAND() * (1387888821-1357562421)+1357562421))
现在到处都是新日期:
0000:00:00
任何帮助将不胜感激
【问题讨论】:
请分享您的ps_blog_post
表的DDL。另外,如果你能澄清你想要达到的目标,那就太好了。
事实上,在我的数据库中,我为我的新博客模块插入了一些帖子。问题是所有日期都已被删除,所以我想在 2 个间隔日期(2013 年 1 月 7 日和 2013 年 12 月 24 日之间)之间添加新的随机日期
time_add
是什么类型?
time_add 时间戳非 CURRENT_TIMESTAMP
【参考方案1】:
试试这个来获取两个时间戳之间的时间戳
SET @MIN = '2013-01-07 00:00:00';
SET @MAX = '2013-12-24 00:00:00';
UPDATE `ps_blog_post`
SET `time_add` = TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, @MIN, @MAX)), @MIN);
Fiddle
【讨论】:
我非常喜欢这种方法。它比处理 TIMESTAMP 更容易处理。对于像我这样的懒人,这里有一个简单的例子(没有变量): SELECT TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, '2017-06-01 00:00:00', '2017-08-01 00:00:00')), '2017-06-01 00:00:00') 也适用于懒人,如果你想要过去 30 天:SELECT TIMESTAMPADD(SECOND, FLOOR(RAND() * TIMESTAMPDIFF(SECOND, DATE_SUB(NOW(), INTERVAL 1 MONTH), NOW() )), DATE_SUB(NOW(), INTERVAL 1 MONTH))【参考方案2】:您的想法是正确的,您从正在使用的 int 文字转换回时间戳的转换似乎已关闭 - 您错过了对 FROM_UNIXTIME
的显式调用:
UPDATE `ps_blog_post`
SET `time_add` =
FROM_UNIXTIME(ROUND((RAND() * (1387888821 - 1357562421) + 1357562421)))
【讨论】:
【参考方案3】:试试这个:
select DATEADD(SECOND, - Round(259200 * RAND(), 0), getdate())
我陈述当前数据,你减去今天的秒数.. 该示例从今天开始随机日期减去 30 天 (60*60*24*30)...
【讨论】:
以上是关于sql在两个日期之间随机更新的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 获取两个日期时间/时间戳之间的随机日期时间/时间戳