Mysql: 获取所选时间之间的小时数
Mysql: get hour between selected time
我有一个 table 这样的:
id | date | time from | time to
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个,第四行没有。
是的,这是可能的。只需使用一些逻辑:
如果时间 to 小于时间 from 则只需使用午夜和时间 from 之间的小时数,但最多 2 小时,并添加 6 小时(最大限制)和时间 to 之间的最小值.
时间从小于时间到然后
--如果time from大于6加0,否则加time from
--如果时间to小于22加0,否则加上24和时间to的差。
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;
我有一个 table 这样的:
id | date | time from | time to
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个,第四行没有。
是的,这是可能的。只需使用一些逻辑:
如果时间 to 小于时间 from 则只需使用午夜和时间 from 之间的小时数,但最多 2 小时,并添加 6 小时(最大限制)和时间 to 之间的最小值.
时间从小于时间到然后
--如果time from大于6加0,否则加time from
--如果时间to小于22加0,否则加上24和时间to的差。
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;