MySQL创建一个圆形时间戳

时间:2013-07-04 01:28:33

标签: mysql sql time

我只是陷入了一个SQL查询,我需要创建一个重新设置某些部分的时间戳。

我需要在一次查询中添加30分钟的间隔,在第二次查询时添加6小时。但是,其余时间应为0。 例, 我有以下日期时间:2013-07-04 00:04:57我想要添加30分钟,我需要的是:2013-07-04 00:34:00。同样是添加小时数,如果我有相同的时间并且增加了6小时,我需要得到:2013-07-04 06:00:00而不是2013-07-04 06:04:57

我正在尝试使用TIMESTAMPADD(HOUR, 6, UTC_TIMESTAMP()),但我找不到一种方法来“舍入”分钟/秒。另外,我一直在尝试:MAKETIME(HOUR(UTC_TIMESTAMP()), MINUTE(ADDTIME(UTC_TIMESTAMP(), '0:30:0')),0),除了缺少日期部分外,效果很好。

你能帮我解决这个问题吗? 非常感谢你!

2 个答案:

答案 0 :(得分:1)

您可以将now()替换为您要更改的任何日期时间:

DATE_ADD(
  DATE_FORMAT(now(), "%Y-%m-%d %H:%i:00"),
  INTERVAL(30 + (IF(SECOND(now()) > 29, 1, 0))) MINUTE
 )

答案 1 :(得分:0)

我的经验主要是使用T-SQL,但我会用以下内容解决这个问题:

SELECT DATEADD(millisecond, -(DATEPART(millisecond, @myDate)), DATEADD(second, -(DATEPART(second, @myDate)), DATEADD(minute, -(DATEPART(minute, @myDate) % 30), DATEADD(minute, 30, @myDate))))

基本上先加入半小时,扣除以模30为单位的剩余分钟,扣除秒数,然后扣除毫秒数。

但我不认为您可以使用DATEPART功能。简要介绍一下the spec,我看到MINUTE(),SECOND(),MICROSECOND()之类的等效函数应该可以正常工作。