【发布时间】:2020-05-18 14:57:37
【问题描述】:
我正在尝试使用一个程序列出两个特定日期之间可供出租的所有汽车。我要从中选择的表,预订,看起来与此类似;
CarNumber StartDate EndDate
1 2018-01-03 2018-01-05
2 2018-01-09 2018-01-14
3 2018-01-03 2018-01-04
2 2018-01-29 2018-02-2
3 2018-01-12 2018-01-16
这是我目前的程序;
CREATE PROCEDURE available_cars (Start_Date DATE, End_Date DATE)
READS SQL DATA
BEGIN
SELECT DISTINCT CarNumber FROM bookings
WHERE NOT StartDate BETWEEN Start_Date AND End_Date
OR NOT EndDate BETWEEN Start_Date AND End_Date;
END;
据我所知,这可以正确检查汽车是否可在 Start_Date 和 End_Date 之间出租,问题是它无法考虑具有相同 CarNumber 的多行。例如,如果我要调用日期为 2018-01-10 到 2018-01-12 的过程,则会显示输出;
CarNumber
1
3
2
很明显,3 号车和 2 号车在这些日期之间不可出租,但由于该表在多行中包含多个预订,因此它也会检查第二个预订。
那么我该如何解释呢?
【问题讨论】:
-
我使用程序的原因是因为我们的教授希望用程序来完成......没有理由因为这个或 MCRE 而对我的帖子投反对票,我已经提供了表格我从中选择以及与之交互的过程。
-
也许您被否决了,因为您没有提供创建表和插入语句,以便其他人可以解决您的问题。或者可能是因为有些人不喜欢张贴家庭作业问题。谁知道?
-
从这个意义上说,这不是家庭作业,这个特定的任务只是为了练习。我真的不明白你的意思,我几乎正在使用我在帖子中提供的东西?唯一的区别是我的预订清单更长。不如不告诉我我做错了,而是提供关于下次如何做的反馈?在描述我的问题时,我看不出我做错了什么。
-
我确实提供了一个表格,但我不知道您对插入语句的意思。我的问题现在写的很难理解吗?另外,我不知道 SO 是什么意思。
-
您确实没有提供数据表。一个数据表由一个 CREATE TABLE 语句和一个或多个 INSERT 语句组成。请注意,重叠的规则很简单,即事件 A 在事件 B 结束之前开始,在事件 B 开始之后结束。在这方面接受的答案是不正确的。