过滤器的时间长度

时间:2014-05-29 05:05:22

标签: php mysql sql datetime data-warehouse

我需要计算上午8点到晚上10点之间的时间。其他时间我不需要。 现在我通过excel执行此操作,并且我希望自动执行该过程

我有下表,事件

start_date         |     end_date          | duration_REAL | duration_08AM_a_10PM
-------------------------------------------------------------------------------
08:00AM 20-05-2014 | 02:00 PM 20-05-2014   | 06:00         |     06:00
04:00AM 20-05-2014 | 06:00 AM 20-05-2014   | 02:00         |     00:00
08:00AM 20-05-2014 | 10:00 PM 20-05-2014   | 14:00         |     14:00
04:00AM 20-05-2014 | 11:00 PM 20-05-2014   | 19:00         |     14:00
04:00AM 20-05-2014 | 04:00 PM 21-05-2014   | 36:00         |     24:00

DATE = TIME DAY-MM-YY

我所拥有的是实际持续时间,但是,我希望在上午8点到晚上10点之间的事件持续时间。

例如,

  • 如果我的活动今天凌晨4点开始,今天早上5点结束,那么考虑到上午8点到10点这个活动的持续时间将是00h。
  • 如果我的活动今天凌晨4点开始,今天结束时间为下午2点,则此活动的持续时间为上午8点至晚上10点,为6小时。
  • 如果我的活动今天下午2点开始,第二天下午2点结束,则8到22的持续时间为14小时。

1 个答案:

答案 0 :(得分:0)

这是我的答案......谢谢你们!

DELIMITER $$

CREATE FUNCTION `BD`.`func_duration`(fecha_ini DATETIME, fecha_fin DATETIME)
RETURNS FLOAT 
BEGIN
DECLARE recorte FLOAT;
SET recorte = -1;

WHILE (fecha_ini <= fecha_fin) DO
    IF (HOUR(fecha_ini) >= 6 AND HOUR(fecha_ini) <= 21) THEN

        SET recorte = recorte + 1;
    END IF;
    SET fecha_ini = DATE_ADD(fecha_ini, INTERVAL 1 MINUTE);
END WHILE;
RETURN recorte;

END$$

DELIMITER ;