SQL выбирает значения даты и времени, которые «близки» друг к другу

#sql #sql-server #datetime #comparison

Вопрос:

У меня есть система, которая планирует события в определенное время (plannedTime), когда эти события разыгрываются, одна и та же таблица обновляется строкой (playedTime), обе имеют тип datetime, поэтому сравнение должно быть довольно простым. Выполнение этого в приложении не было бы проблемой, но есть ли простой способ выбрать события, время воспроизведения которых составляет 10 минут от запланированного времени в одном запросе?

Я пытался:

 SELECT * FROM eventlist
where playedTime LIKE plannedTime
 

Однако это просто даст мне события, которые разыгрываются в то же самое время, когда они были запланированы, а их немного, если вообще есть.

Моя идея состоит в том, чтобы создать промежуток времени между воспроизведенным и запланированным временем, и если это не превышает 10 минут, включите его в результат, но я не знаю, с чего начать в SQL — запросе.

Ответ №1:

Я думаю, вам нужны сравнения во времени:

 SELECT el.*
FROM eventlist el
WHERE el.playedTime <= DATEADD(minute, 10, plannedTime) AND
      el.playedTime >= DATEADD(minute, -10, plannedTime);
 

Примечание: Это интерпретирует «в течение 10 минут» как » до » или «после».

Комментарии:

1. Фантастика, это именно то, что я искал, спасибо, Гордон!