Mysql DATE_ADD 1 小时,我希望分钟数为 15 或 30
Mysql DATE_ADD 1 hour and I want minutes be 15, or 30
我想做的是在当前日期上加 1 小时 + 使分钟数在 15 分钟或 30 分钟内。
示例:
'2022-05-19 22:13:28'
I want it to be :
'2022-05-19 23:15:00'
另一个例子
'2022-05-19 22:24:00'
I want it to be:
'2022-05-19 23:30:00'
假设如果它已经是偶数 15 分钟,它只会增加一个小时,你必须对时间进行一些计算,然后 re-add 它到日期:
select date_add(date(d), interval ceil(time_to_sec(d)/900)*900+3600 second)
from (select '2022-05-19 22:13:28' d union all select '2022-05-19 22:24:00' union all select '2022-05-19 22:15:00' union all select '2022-05-19 21:59:00' union all select '2022-05-19 21:44:00') foo
除以 900 秒,取上限,然后乘以 900,四舍五入到最接近的偶数 15 分钟。
SELECT FROM_UNIXTIME(3600 + 900 * CEIL(UNIX_TIMESTAMP(datetime_column) / 900))
FROM table
UNIX_TIMESTAMP
将日期时间转换为秒数。
/ 900
计算15min的量。块在里面。
CEIL
将不完整的最后一个块转换为完整的块。
* 900
将块数转换回秒数。
+ 3600
增加一个小时。
FROM_UNIXTIME
将秒数转换为日期时间。
我想做的是在当前日期上加 1 小时 + 使分钟数在 15 分钟或 30 分钟内。 示例:
'2022-05-19 22:13:28'
I want it to be :
'2022-05-19 23:15:00'
另一个例子
'2022-05-19 22:24:00'
I want it to be:
'2022-05-19 23:30:00'
假设如果它已经是偶数 15 分钟,它只会增加一个小时,你必须对时间进行一些计算,然后 re-add 它到日期:
select date_add(date(d), interval ceil(time_to_sec(d)/900)*900+3600 second)
from (select '2022-05-19 22:13:28' d union all select '2022-05-19 22:24:00' union all select '2022-05-19 22:15:00' union all select '2022-05-19 21:59:00' union all select '2022-05-19 21:44:00') foo
除以 900 秒,取上限,然后乘以 900,四舍五入到最接近的偶数 15 分钟。
SELECT FROM_UNIXTIME(3600 + 900 * CEIL(UNIX_TIMESTAMP(datetime_column) / 900))
FROM table
UNIX_TIMESTAMP
将日期时间转换为秒数。
/ 900
计算15min的量。块在里面。
CEIL
将不完整的最后一个块转换为完整的块。
* 900
将块数转换回秒数。
+ 3600
增加一个小时。
FROM_UNIXTIME
将秒数转换为日期时间。