查找日期范围内的记录数

时间:2017-03-07 13:34:45

标签: mysql

table:booked_timings

    id     | from date             |     todate          | vehicle id
    ------------------------------------------------------------------
   1        2017-05-04 06:00:00      2017-05-04 08:00:00     98
   2        2017-05-04 10:00:00      2017-05-04 12:00:00     98
   3        2017-05-04 15:00:00      2017-05-04 18:30:00     98

上表包含ID为98的车辆的预定时间。当用户尝试按照以下时间预订时,我需要一个MySQL查询列出所有预订的车辆时间为98的

(i)08:00:00至12:00:00 (ii)05:00:00至23:00:00

1 个答案:

答案 0 :(得分:0)

SELECT * FROM TABLE WHERE 1=1 AND 
(
    (
        STR_TO_DATE(DATE_FORMAT(FROMDATE,'%H:%i:%s'),'%H:%i:%s') > STR_TO_DATE(08:00:00,'%H:%i:%s') AND STR_TO_DATE(DATE_FORMAT(FROMDATE,'%H:%i:%s'),'%H:%i:%s') < STR_TO_DATE(12:00:00,'%H:%i:%s')
    )
    OR
    (
        STR_TO_DATE(DATE_FORMAT(FROMDATE,'%H:%i:%s'),'%H:%i:%s') > STR_TO_DATE(05:00:00,'%H:%i:%s') AND STR_TO_DATE(DATE_FORMAT(FROMDATE,'%H:%i:%s'),'%H:%i:%s') < STR_TO_DATE(23:00:00,'%H:%i:%s')
    )
)

如上面的代码所示,假设fromdatetodate是具有DATE数据类型的COLUMN。并且仅将该列的时间分数与您指定的持续时间进行比较。在此处我们提供字符串,因此我们需要使用

将此字符串转换为日期

STR_TO_DATE()功能。

尝试上面的代码,希望这会有所帮助。