MySQL DATE_ADD加1小时后如何将分钟规整为15或30
MySQL 时间加1小时后按15分钟刻度向上规整实现方案
实现逻辑
按照需求拆分为两步处理,全程兼容跨小时、跨天的边界场景:
- 第一步:使用
DATE_ADD()函数为原始时间增加1小时,严格满足指定函数的使用要求 - 第二步:将偏移后的时间按15分钟为步长向上取整,自动对齐到0分/15分/30分/45分的刻度,秒数自动统一置为0,不需要额外处理秒值
可直接使用的SQL代码
假设存储原始时间的字段名为original_time,所属表为your_table,查询语句如下:
SELECT original_time, FROM_UNIXTIME( CEIL(UNIX_TIMESTAMP(DATE_ADD(original_time, INTERVAL 1 HOUR)) / 900) * 900 ) AS target_time FROM your_table;
如果需要直接计算单个字面量时间,可以直接传值测试:
-- 测试第一个示例值 SELECT FROM_UNIXTIME( CEIL(UNIX_TIMESTAMP(DATE_ADD('2022-05-19 22:13:28', INTERVAL 1 HOUR)) / 900) * 900 ); -- 输出:2022-05-19 23:15:00 -- 测试第二个示例值 SELECT FROM_UNIXTIME( CEIL(UNIX_TIMESTAMP(DATE_ADD('2022-05-19 22:24:00', INTERVAL 1 HOUR)) / 900) * 900 ); -- 输出:2022-05-19 23:30:00
代码说明
- 900秒对应15分钟的时间长度,是本次15分钟刻度规整的步长基准
CEIL()函数实现向上取整逻辑:只要当前时间超过某个15分钟刻度,哪怕只超1秒,也自动进位到下一个刻度- 基于UNIX时间戳计算,天然支持跨小时、跨天、跨月的时间进位,不需要额外写分支判断边界情况
示例验证
用需求给出的两个测试用例校验结果:
测试用例1:原始时间
'2022-05-19 22:13:28'
- DATE_ADD加1小时后得到中间时间
'2022-05-19 23:13:28'- 按15分钟向上取整后输出
'2022-05-19 23:15:00',与预期结果完全一致
测试用例2:原始时间
'2022-05-19 22:24:00'
- DATE_ADD加1小时后得到中间时间
'2022-05-19 23:24:00'- 按15分钟向上取整后输出
'2022-05-19 23:30:00',与预期结果完全一致
内容的提问来源于stack exchange,提问作者user13432717
相关产品推荐
相关产品推荐

