【发布时间】:2021-02-03 06:48:54
【问题描述】:
我有一个表预订,其中有两列 job_time_beg 和 job_time_end 并且工作从 8:00 开始到 16:00 现在我需要如果可用时间与给定时间重叠,以便我知道我不想预订在这个给定的时间内。
我正在使用
select count(*)as cnt from orders
where job_date = '2021-02-04'
and job_truck = '24'
and ((job_time_beg >= '10:00' and job_time_beg < '12:00')
or (job_time_end > '(11):00' and job_time_end <= '12:00'))
AND order_status_id in (1,5)
这在大多数情况下都可以正常工作,但如果在 8:00 到 11:00 之间有预订,则此查询不起作用,并显示 10:00 到 12:00 的时间在 8:00 到 11 之间重叠:00 我也试过了
SELECT count(*) as cnt
FROM orders
WHERE
job_date = '$data'
and job_truck = '$truck' and
(
'$start' BETWEEN job_time_beg and job_time_end
OR
'$end' BETWEEN job_time_beg and job_time_end
)
AND order_status_id in (1,5)
适用于 8:00 和 11:00 重叠,但在预订可用于前开始时间时不起作用,如果我们有 8:00 到 10:00 的预订,则可以等于下一次预订的结束时间我们的时间是 10:00 到 12:00,这不会重叠,因为我们可以从 10:00 开始分配下一个预订。
请看一下sql fiddle sqlfiddle
【问题讨论】:
-
job_time_beg和job_time_end的数据类型是什么? -
没有
FROM子句? -
@Popeye 数据类型为时间
-
@jarlh FROM 我在第二个查询中提到的订单
-
使用明确的
<.. and .. <而不是BETWEEN排除区间边界。