Фильтрация в SQL между вечером предыдущего дня и утром текущего дня

#sql #sql-server

#sql #sql-сервер

Вопрос:

Я пытаюсь отфильтровать таблицу между 4 часами дня предыдущего дня и 4 часами утра текущего дня, но не знаю, как это сделать.

Что-то вроде:

 WHERE dateColumn gt;= DATEADD(DAY, -1, GETDATE()) AND dateColumn lt;= GETDATE() AND DATEPART(hh, dateColumn) gt;= 16 AND DATEPART(hh, dateColum) lt;= 4  

Я понимаю, что вторая строка в заявлении явно неверна и не вернет никаких результатов, но это должно дать представление о том, что я пытаюсь сделать. Мы ценим любую помощь!

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

1. Каков тип вашей колонки дат? dateadd(hour, 16, cast(cast(DATEADD(DAY, -1, GETDATE()) as date) as datetime2))

2. Вы можете попробовать что-то подобное SELECT CONVERT(SMALLDATETIME, DATEADD(d,-1,CONVERT(DATE, CURRENT_TIMESTAMP))) '16:00' и без даты.

Ответ №1:

Есть различные способы, которыми вы могли бы это сделать, это позволяет получить дату и время в 1600 вчера и 1600 сегодня.

 WHERE dataColumn gt;= dateadd(hour, -8, convert(datetime, convert(date, getdate())))  AND dateColumn lt;= dateadd(hour, 16, convert(datetime, convert(date, getdate())));