Mysql:在选定时间之间获取小时

时间:2015-09-19 02:41:10

标签: mysql range hour

我有一张这样的表:

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,第四行没什么。

1 个答案:

答案 0 :(得分:2)

是的,有可能。只需使用一些逻辑:

  • 如果时间早于时间,则只需使用午夜和时间之间的小时数,但最多可使用2小时,并在6小时(最大限制)和时间之间加上最小值。

  • 及时从低于时间到

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

添加时间

- 如果时间to小于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;

以下是示例:http://sqlfiddle.com/#!9/78571/36/0