SQL заявление, чтобы найти, если даты между двумя датами - PullRequest
0 голосов
/ 13 апреля 2020

С помощью оператора SQL я хочу найти записи за один день.

Рассмотрим следующие записи:

  • Id 1, StartAt 2020-04-12 08: 00: 00.0000000, Конец 2020-04-12 15: 00: 00.0000000
  • Id 2, StartAt 2020-04-11 08: 00: 00.0000000, Конец 2020-04-13 15: 00: 00.0000000

Когда я хочу найти записи за день:

  • 2020-04-11, результат должен быть: Id 2
  • 2020-04-12, результат должен быть: Id 1 и 2
  • 2020-04-13, результат должен быть: Id 2

I попытался использовать разные операторы '<' '>' и ключевое слово BETWEEN, но не смог получить правильный синтаксис, поскольку я хочу найти временный период в другом временном периоде.

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Рассмотрим:

select count(*)
from mytable
where 
    @mydate >= cast(startAt as date) 
    and @mydate < dateadd(day, 1, cast(endAt as date))

Демонстрация на DB Fiddle - вы можете поиграться со значением @mydate, чтобы проверить 3 сценария ios .

0 голосов
/ 13 апреля 2020

Я думаю, что вы хотите:

where @date <= endAt and
      dateadd(day, 1, @date) > startat

Возвращает любой временной интервал, который включает любое время на @date.

...