我只是陷入了一个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)
,除了缺少日期部分外,效果很好。
答案 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()之类的等效函数应该可以正常工作。