【问题标题】:Create a User-Defined Function to check if a car is available between two dates?创建一个用户定义的函数来检查两个日期之间是否有车?
【发布时间】:2020-07-30 21:29:25
【问题描述】:

我有一个名为 Bookings 的表,其中存储了许多汽车预订,其中包含 CarNumberStartDateEndDate 列。我需要创建一个用户定义函数来检查汽车是否可用,如果汽车可用,则应返回 1,如果不可用则返回 0

目前的功能:

CREATE FUNCTION Available(StarDate DATE, EndDate DATE, CarNumber INT) RETURNS INTEGER NOT DETERMINISTIC RETURN

我才刚刚开始了解用户定义的函数,所以可以使用一些帮助。

CREATE TABLE Bookings (CarNumber INT, StartDate DATE, EndDate DATE);

INSERT INTO Bookings (CarNumber, StartDate, EndDate) VALUES (6, '2018-01-02', '2018-01-15'), (1, '2018-01-03', '2018-01-05'), (3, '2018-01-03', '2018-01-04'), (8, '2018-01-04', '2018-01-30'), (10, '2018-01-10', '2018-01-13');

【问题讨论】:

  • 暂时忽略该功能,您可以添加用于检查车辆可用性的代码,
  • 创建一个返回所需信息的 SELECT 并将其放入用变量替换日期和 ID 号的函数中
  • 你明白我们不能在不知道表结构和某些数据的情况下编写这样的查询
  • 显然我们可以:-(

标签: mysql database date subquery sql-function


【解决方案1】:

您可以使用exists 子查询来检查给定日期范围是否与给定汽车的任何预订日期范围重叠。

考虑以下语法:

delimiter //

create function availability(
    pStartDate datetime, 
    pEndDate datetime, 
    pCarNumber int
)
returns bool deterministic
begin
    declare res bool;
    select not exists(
        select 1 
        from bookings 
        where startDate < pEndDate and endDate > pStartDate and carNumber = pCarNumber
    ) into res;
    return res;
end;
//

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-26
    相关资源
    最近更新 更多