我正在开展from
和to
时间的项目,我必须查明是否在该时间段内分配了任何其他车辆。
对于EG:
车辆1在案例表中分配FROM 2017-04-29 10:00:00 TO 2017-04-29 12:00:00
。
我的使用案例:我不能在该时间范围内分配相同的车辆。
那么,我如何检查车辆是否被分配/与时间范围发生冲突? (在mySQL中)
这是我到目前为止的地方:
SELECT 'vehicle_code'
FROM 'case'
WHERE 'from_time' <= '2017-04-29 11:00:00'
AND 'to_time' >= '2017-04-29 13:00:00'
答案 0 :(得分:1)
我猜您尝试分配%VEHICLE_CODE%
的特定车辆无法在该时间范围内分配,因此您对任何车辆都不感兴趣,但在特定车辆中。< / p>
如果至少出现以下三种情况,则会出现重叠:
from_time
属于您要求的期限to_time
属于您要求的期限然后您可以使用此查询
SELECT count(*)
FROM `case`
WHERE vehicle_code = %VEHICLE_CODE%
AND (from_time between '2017-04-29 11:00:00' AND '2017-04-29 13:00:00'
OR to_time BETWEEN '2017-04-29 11:00:00' AND '2017-04-29 13:00:00'
OR from_time < '2017-04-29 11:00:00' AND to_time > '2017-04-29 13:00:00');
使用此查询,您确保此车辆没有任何分配 from_time 或 to_time 进入查询期间或整个时期都是如此。
如果查询返回0,则不会有重叠。如果返回的值超过0,则确实存在重叠。
与@dnoeth告诉您的相似,您还可以排除所有条目,其中to_time小于查询间隔的开始或 from_time更大比查询间隔结束。如果仍有任何条目,则这是重叠。所以你会有
SELECT count(*)
FROM `case`
WHERE vehicle_code = %VEHICLE_CODE%
AND NOT (from_time > '2017-04-29 13:00:00'
OR to_time < '2017-04-29 11:00:00');
答案 1 :(得分:0)
您需要检查这些时间中的任何一个是否属于任何其他车辆的时间范围,例如:
SELECT vehicle_code
FROM `case`
WHERE from_time >= '2017-04-29 11:00:00' AND to_time <= '2017-04-29 11:00:00'
UNION
SELECT vehicle_code
FROM `case`
WHERE from_time >= '2017-04-29 13:00:00' AND to_time <= '2017-04-29 13:00:00'
如果此查询返回任何行,则表示已预订了另一辆车,因此您需要显示相应的错误消息。