Вывести из таблицы SQL все вылеты, совершенные 1 января 1900 года с 10 ч по по 14 ч

Рейтинг: -1Ответов: 2Опубликовано: 13.01.2023

Задача из онлайн-тренажера SQLAcademy. Есть следующие таблицы: Company. Поля:

id(INT, PRIMARY KEY), name(VARCHAR)

Trip. Поля:

id(INT, PRIMARY KEY), company(INT, FOREIGN KEY)<->Company.id, plane(VARCHAR), time_out(DATETIME), time_in(DATETIME), town_from(VARCHAR), town_in(VARCHAR)

Pass_in_trip. Поля:

id(INT, PRIMARY KEY), trip(INT, FOREIGN KEY)<->Trip.id, passenger(INT, FOREIGN KEY)<->Passenger.id, place(VARCHAR)

Passenger. Поля: i

d(INT, PRIMARY KEY), name(VARCHAR).

Собственно нужно вывести из таблицы все вылеты, которые были совершены с 10 ч до 14 ч 1 января 1900 года. Ожидаемое поле *. Пытался делать так:

SELECT * FROM Trip WHERE
YEAR(Trip.time_out)="1900" AND
MONTH(Trip.time_out)="1" AND
DAY(Trip.time_out)="1" AND
HOUR(Trip.time_out)="10" AND
YEAR(Trip.time_in)="1900" AND
MONTH(Trip.time_in)="1" AND
DAY(Trip.time_in)="1" AND
HOUR(Trip.time_in )="14";

Так тоже пытался

SELECT * FROM Trip WHERE
time_out="1900-01-01 10:00:00" AND
time_in="1900-01-01 14:00:00";

И даже так:

SELECT * FROM Trip WHERE 
YEAR(time_out)="1900" AND
MONTH(time_out)="1" AND
DAY(time_out)="1" AND 
HOUR(time_out)>=10 AND
HOUR(time_out)<=14;

Но ответ все время неправильный. Есть кто решал эту задачу?

В любом случае подскажите хорошее решение, пожалуйста

Ответы

▲ 0Принят
SELECT * FROM Trip
WHERE time_out 
BETWEEN '1900.01.01 10:00:00' AND '1900.01.01 14:00:00'
▲ 0

Ваш запрос имеет некоторые проблемы в сравнении дат и времени. Вместо того чтобы сравнивать каждый компонент (год, месяц, день, час) отдельно, вы можете воспользоваться функциями для извлечения нужных значений из даты и времени. Вот как вы можете это сделать:

SELECT * 
FROM Trip 
WHERE 
    Trip.time_out >= '1900-01-01 10:00:00' AND
    Trip.time_out <= '1900-01-01 14:00:00';

В этом запросе мы выбираем все строки из таблицы Trip, где время вылета находится в диапазоне от 10:00 до 14:00 1 января 1900 года.

Если вы хотите учесть и дату прилета, то можно использовать операторы логического И (AND):

SELECT * 
FROM Trip 
WHERE 
    Trip.time_out >= '1900-01-01 10:00:00' AND
    Trip.time_out <= '1900-01-01 14:00:00' AND
    Trip.time_in >= '1900-01-01 10:00:00' AND
    Trip.time_in <= '1900-01-01 14:00:00';

Пожалуйста, убедитесь, что формат даты и времени в вашей базе данных совпадает с использованным в запросе.