Фильтрация записей по текущей дате

0

Я застреваю в запросе базы данных. У меня есть таблица с двумя столбцами один для даты и другой для времени.

Я хочу отфильтровать записи с текущими значениями даты и времени, если только эти записи будут отображать те, которые содержат значение даты и времени, большее или равное текущему значению даты и времени. Можете ли вы помочь в написании этого SQL-запроса? Спасибо

Теги:

3 ответа

2

Ты можешь использовать:

where date > curdate() or
      (date = curdate() and time > curtime())
0

Другой вариант - просто объединить дату и время. В MySQL это простой и понятный способ создания даты:

where CONCAT(date, ' ', time) > NOW()

NB: как прокомментировал Хуан Карлос Оропеза, это выражение не позволяет вам использовать существующие индексы для столбцов date и time (если таковые имеются). Если вы имеете дело с очень большим количеством данных и/или производительность имеет решающее значение для вас, это решение, вероятно, не будет масштабироваться так же хорошо, как решение Гордона Линоффа.

  • 0
    проблема в том, что вы не можете использовать индекс для этого фильтра
  • 0
    @JuanCarlosOropeza: corect; Я отредактировал свой ответ, чтобы быть ясным по этому вопросу. Если производительность не имеет значения, я нахожу это выражение более явным (ясным), чем другое.
Показать ещё 2 комментария
0
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');
  • 0
    Проверьте Гордон ответ. Вы удаляете все дни до 10 am
  • 0
    Я надеюсь это решит
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню