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在两个日期之间随机更新的主要内容,如果未能解决你的问题,请参考以下文章

如何使用php在两个日期之间生成随机日期?

PostgreSQL 获取两个日期时间/时间戳之间的随机日期时间/时间戳

在 MySQL 中插入/更新随机日期

在计算两个随机日期之间的天数时,timepan会考虑闰年吗?

PHP——生成随机数和日期时间

PHP的函数-----生成随机数日期时间函数