Я застреваю в запросе базы данных. У меня есть таблица с двумя столбцами один для даты и другой для времени.
Я хочу отфильтровать записи с текущими значениями даты и времени, если только эти записи будут отображать те, которые содержат значение даты и времени, большее или равное текущему значению даты и времени. Можете ли вы помочь в написании этого SQL-запроса? Спасибо
Ты можешь использовать:
where date > curdate() or
(date = curdate() and time > curtime())
Другой вариант - просто объединить дату и время. В MySQL это простой и понятный способ создания даты:
where CONCAT(date, ' ', time) > NOW()
NB: как прокомментировал Хуан Карлос Оропеза, это выражение не позволяет вам использовать существующие индексы для столбцов date
и time
(если таковые имеются). Если вы имеете дело с очень большим количеством данных и/или производительность имеет решающее значение для вас, это решение, вероятно, не будет масштабироваться так же хорошо, как решение Гордона Линоффа.
create table Test(id integer, title varchar(100), date DATE , time TIME);
insert into Test(id, title, date, time) values(1, "Date one", '2019-01-01', '01:20:00');
insert into Test(id, title, date, time) values(2, "Date two", '2019-01-02', '11:40:00');
insert into Test(id, title, date, time) values(3, "Date three", '2019-01-03', '23:56:00');
insert into Test(id, title, date, time) values(4, "Date foure", '2019-01-04', '12:20:00');
insert into Test(id, title, date, time) values(5, "Date five", '2019-01-05', '01:20:00');
insert into Test(id, title, date, time) values(6, "Date six", '2019-01-12', '15:47:00');
insert into Test(id, title, date, time) values(7, "Date seven", '2019-01-21', '10:20:00');
insert into Test(id, title, date, time) values(8, "Date eight", '2019-02-01', '01:20:00');
select * from Test WHERE date > '2019-01-04' OR (date = '2019-01-04' AND time >= '10:00:00');
10 am