我写了一个租赁软件,但我没有得到任何进一步...
我有这样一张table:
car_id
date_from
date_to
当任何人想租这个日期:
DATE_FROM: 2023-09-09
DATE_TO: 2023-09-15
现在我必须检查数据库中所有未使用的日期。
SELECT
car_id,
date_from,
date_to
FROM cars
INNER JOIN (
SELECT date_from, date_to FROM booking WHERE (DATE_FROM NOT between date_from AND date_to) AND (DATE_TO NOT BETWEEN date_from AND date_to
)
idk我做错了什么,我希望任何人都能帮助我解决这个问题
非常感谢!!
3条答案
按热度按时间yyyllmsg1#
在PostgreSQL中,您可以为预订间隔部署
datarange
data type。该表将具有以下DDL
你的样本参数范围是
'[2023-09-09, 2023-09-15]'::daterange
吗注意,* 方括号 * 表示两端都是 * 包括 *,括号
)
是 * 不包括 *。使用以下示例数据
您可以使用 overlap 运算符
&&
来标识 * 与您的范围重叠 * 的预订。您要执行的查询是获取与参数范围 * 重叠的所有未预订汽车 * -将简单的
not in
与上述子查询结合使用:l5tcr1uw2#
诀窍在于当(s1〈e2)和(s2〈e1)时,两个区间(s1,e1)和(s2,e2)重叠。
下面的选择为您提供给定间隔内的所有可用车厢(在示例
01/07/2023
-01/27/2023
中对于此架构,测试数据
结果是
| 汽车标识|日期_从|日期_至|
| - ------|- ------|- ------|
| 五个|2023年7月1日|2023年1月27日|
| 六个|2023年7月1日|2023年1月27日|
Play with it on DB-Fiddle
根据< and >您的具体要求,您可能需要用〈=和〉=替换。
gk7wooem3#
据我所知,问题陈述是基于某个日期的可用性作为输入参数。所以这个查询将工作。