0

我刚刚卡在一个 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)效果很好,只是缺少日期部分。

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

4

2 回答 2

1

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

DATE_ADD(
  DATE_FORMAT(now(), "%Y-%m-%d %H:%i:00"),
  INTERVAL(30 + (IF(SECOND(now()) > 29, 1, 0))) MINUTE
 )
于 2013-07-04T01:45:53.737 回答
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 功能。简要看一下规范,我发现 MINUTE()、SECOND()、MICROSECOND() 等等效函数应该类似地工作。

于 2013-07-04T01:44:15.033 回答