代码之家  ›  专栏  ›  技术社区  ›  user5566364

将MySQL日期舍入到最近的间隔,而不受夏令时更改的影响

  •  1
  • user5566364  · 技术社区  · 6 年前
    SET @time := '2018-11-08 00:36:50.000000';
    SET @intervalInMinutes := 15
    SELECT FROM_UNIXTIME((Select FLOOR ((select UNIX_TIMESTAMP(@time) / (@intervalInMinutes* 60))) * (@intervalInMinutes*60)));
    

    我需要在MySQL中编写一个查询,转换用户指定的最近间隔类别中的日期/时间。 示例:

      1. 15分钟的间隔将转换为“2018-10-24 17:45:00”
      2. 30分钟的间隔将转换为“2018-10-24 17:30:00”
      3. 60分钟的间隔将转换为“2018-10-24 17:00:00”
    • 例2:“2018-10-2417:36:20.000000”;

      1. 15分钟的间隔将转换为“2018-10-24 17:30:00”
      2. 60分钟的间隔将转换为“2018-10-24 17:00:00”

    this post ,第一个答案有一条评论说 该方法将在夏时制之间的日期时间失败 另外,我希望这适用于MySQL 5.6、5.7和8.0。

    1 回复  |  直到 6 年前
        1
  •  0
  •   fifonik    6 年前

    在使用将datetime转换为unixtime并返回时,您可能会遇到的问题是很正常的 explained in MySQL database .

    SET @time := '2018-11-08 00:36:50.000000';
    SET @intervalInMinutes := 15;
    SELECT TIMESTAMP(DATE(@time), SEC_TO_TIME(FLOOR(TIME_TO_SEC(TIME(@time)) / (@intervalInMinutes * 60)) * (@intervalInMinutes * 60)));