Создать пользовательскую функцию, чтобы проверить, доступен ли автомобиль между двумя датами? - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть таблица с именем Bookings, где хранится количество мест для бронирования автомобилей со столбцами CarNumber, StartDate, EndDate. Мне нужно создать определяемую пользователем функцию, чтобы проверить, доступен ли автомобиль, если автомобиль доступен, он должен вернуть 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');

1 Ответ

1 голос
/ 17 апреля 2020

Вы можете использовать подзапрос 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;
//
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...