【问题标题】:filter length of time [duplicate]过滤时间长度[重复]
【发布时间】:2014-05-29 05:05:22
【问题描述】:

我需要计算上午 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 点,此活动的持续时间将为 00hs。
  • 如果我的活动从今天凌晨 4 点开始,到今天下午 2 点结束,那么考虑到上午 8 点到晚上 10 点,此活动的持续时间为 6 小时。
  • 如果我的活动从今天下午 2 点开始并在第二天下午 2 点结束,那么 8 到 22 的持续时间将是 14 小时。

【问题讨论】:

  • 现在是英文和标记,我使用 mysql...
  • 我只收到负面声誉 :( 我会等待好的答案 :D
  • 04:00AM 20-05-201404:00 PM 20-05-2014 之间的实际持续时间不是 12 小时吗?
  • 您可能会发现这个类似的 sql-server 问题很有帮助:Calculate time difference (only working hours) in minutes between two dates
  • 西蒙!你的权利!下午 4 点是第二天,现在我编辑了!谢谢..我正在检查另一个帖子...明天我会尝试

标签: php mysql sql datetime data-warehouse


【解决方案1】:

这是我的答案...谢谢大家!

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 ;

【讨论】:

    猜你喜欢
    • 2015-03-19
    • 2018-04-26
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多