Как выбрать записи с интервалом в минутах текущего дня и времени?

0

У меня есть столбцы:

date = "2017-12-10" (тип = дата)

time = "14:10:00" (тип = время)

duration = "40" (type = varchar 100)

Например, сегодня дата "2017-12-10", а сегодня время "14:30". Как я могу получить записи только для текущего времени и только в промежутке времени "40 минут"? Таким образом, принятый временной диапазон будет "14: 10: 00-14: 50: 00".

Я пробовал что-то вроде этого:

SELECT date, time, duration FROM events WHERE date = CURDATE() AND time >= CURTIME();

Но он не выполняет поиск за 40 минут.

Спасибо.

Теги:

2 ответа

1
Лучший ответ

этот?

SELECT date, time, duration FROM events WHERE date = CURDATE() AND time between date_add(CURTIME(), interval -duration minutes) and CURTIME();
  • 0
    Не могли бы вы сказать мне, как я могу сделать эту логику "date_add (CURTIME (), интервал -duration-20 минут)"? Например, если я хочу еще 20 минут.
1

Я думал, что для вашей проблемы требуется + / - (продолжительность/2)

select
      date_sub(CONCAT(dt, " ", tim), interval ( cast(duration as unsigned) / 2 ) minute) st
    , date_add(CONCAT(dt, " ", tim), interval ( cast(duration as unsigned) / 2 ) minute) fin
    , d.*
from (
    select curdate() as dt, cast('14:10:00' as time) as tim, '40' as duration union all
    select curdate() as dt, cast('14:10:00' as time) as tim, '60' as duration union all
    select curdate() as dt, cast('14:10:00' as time) as tim, '90' as duration
    ) d
where
    CONCAT(dt, " ", tim) between date_sub(CONCAT(dt, " ", tim), interval ( cast(duration as unsigned) / 2 ) minute) 
                             and date_add(CONCAT(dt, " ", tim), interval ( cast(duration as unsigned) / 2 ) minute)
  • 0
    изменил запрос, так что вы видите подход как предикаты выбора и как предложения

Ещё вопросы

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