Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql:获取所选时间之间的小时数_Mysql_Range_Hour - Fatal编程技术网

Mysql:获取所选时间之间的小时数

Mysql:获取所选时间之间的小时数,mysql,range,hour,Mysql,Range,Hour,我有一张这样的桌子: id |日期|时间从|时间到 1 | 2015-09-19 | 20:00 | 04:00 2 | 2015-09-19 | 10:00 | 23:00 3 | 2015-09-19 | 22:00 | 10:00 4 | 2015-09-20 | 10:00 | 16:00 对于每一行,我需要22:00到06:00之间的一个小时 然后第一行有6个,第二行有1个,第三行有8个,第四行什么都没有。是的,这是可能的。只要用一些逻辑: 如果到的时间小

我有一张这样的桌子:

id |日期|时间从|时间到 1 | 2015-09-19 | 20:00 | 04:00 2 | 2015-09-19 | 10:00 | 23:00 3 | 2015-09-19 | 22:00 | 10:00 4 | 2015-09-20 | 10:00 | 16:00

对于每一行,我需要22:00到06:00之间的一个小时


然后第一行有6个,第二行有1个,第三行有8个,第四行什么都没有。

是的,这是可能的。只要用一些逻辑:

如果到的时间小于从开始的时间,则只需使用午夜到从开始的时间之间的小时数,但最多2小时,并将最大限制和到的时间加上6小时之间的最小值

SELECT
  *,
  CASE
    WHEN time_to < time_from
    THEN
      TIME_TO_SEC (
        LEAST(TIMEDIFF(TIME('24:00'), time_from), TIME('02:00')) +
        LEAST(time_to, TIME('06:00'))
      ) / 60 / 60
    ELSE
      TIME_TO_SEC (
        CASE WHEN time_from > TIME('06:00') THEN TIME('00:00') ELSE time_from END +
        CASE WHEN time_to < TIME('22:00') THEN TIME('00:00') ELSE TIMEDIFF(TIME('24:00'), time_to) END
      ) / 60 / 60
  END new_time_to
FROM demo;
从那时起,时间比那时要短

-如果时间从大于6,则添加0,否则添加时间从

-如果时间到小于22,则添加0,否则添加24和时间到之间的差值

SELECT
  *,
  CASE
    WHEN time_to < time_from
    THEN
      TIME_TO_SEC (
        LEAST(TIMEDIFF(TIME('24:00'), time_from), TIME('02:00')) +
        LEAST(time_to, TIME('06:00'))
      ) / 60 / 60
    ELSE
      TIME_TO_SEC (
        CASE WHEN time_from > TIME('06:00') THEN TIME('00:00') ELSE time_from END +
        CASE WHEN time_to < TIME('22:00') THEN TIME('00:00') ELSE TIMEDIFF(TIME('24:00'), time_to) END
      ) / 60 / 60
  END new_time_to
FROM demo;

下面是一个示例:

是的,您可以使用用户定义的函数或内联if语句来实现这一点。