创建一个用户定义的函数来检查两个日期之间是否有可用的汽车?
Create a User-Defined Function to check if a car is available between two dates?
我有一个名为 Bookings
的 table,许多汽车预订存储在 CarNumber
、StartDate
、EndDate
列中。我需要创建一个用户定义的函数来检查汽车是否可用,如果汽车可用,它应该 return a 1
如果没有 return a 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');
您可以使用 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;
//
我有一个名为 Bookings
的 table,许多汽车预订存储在 CarNumber
、StartDate
、EndDate
列中。我需要创建一个用户定义的函数来检查汽车是否可用,如果汽车可用,它应该 return a 1
如果没有 return a 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');
您可以使用 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;
//