Вывести из таблицы SQL все вылеты, совершенные 1 января 1900 года с 10 ч по по 14 ч
Задача из онлайн-тренажера 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;
Но ответ все время неправильный. Есть кто решал эту задачу?
В любом случае подскажите хорошее решение, пожалуйста
Ответы (2 шт):
SELECT * FROM Trip
WHERE time_out
BETWEEN '1900.01.01 10:00:00' AND '1900.01.01 14:00:00'
Ваш запрос имеет некоторые проблемы в сравнении дат и времени. Вместо того чтобы сравнивать каждый компонент (год, месяц, день, час) отдельно, вы можете воспользоваться функциями для извлечения нужных значений из даты и времени. Вот как вы можете это сделать:
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';
Пожалуйста, убедитесь, что формат даты и времени в вашей базе данных совпадает с использованным в запросе.