Mysql:获取所选时间之间的小时数
我有一张这样的桌子: 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之间的一个小时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个,第四行什么都没有。是的,这是可能的。只要用一些逻辑: 如果到的时间小
然后第一行有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语句来实现这一点。