TSQL: Date BETWEEN Query - Игнорирование времени

Я пытаюсь сделать запрос между двумя датами. Я хотел бы сделать это, не беспокоясь о времени. Когда пользователь вводит 2 даты, которые они хотят выполнить, нет выбора для времени. Это означает, что даты, которые они вводят по умолчанию, - до 12:00 AM.

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

Вот мой SQL:

TheDate BETWEEN @EnteredBeginDate AND @EnteredEndDate

Поэтому, когда пользователь выполняет поиск диапазона между 8/6/2009 и 9/9/2009, я хочу вернуть записи:

8/6/2009 11:33:02 AM
8/6/2009 11:39:17 AM
9/9/2009 8:21:30 AM

Что происходит сейчас, я только вернусь:

8/6/2009 11:33:02 AM
8/6/2009 11:39:17 AM

Может кто-нибудь, пожалуйста, порекомендует лучший способ сделать это в SQL? Я знаю, как это сделать на С#.

Ответ 1

Просто используйте DATEADD, чтобы enddate установил его в полночь в следующий день...

TheDate BETWEEN @EnteredBeginDate AND DATEADD(day, 1, @EnteredEndDate)

Если вы хотите быть очень точным, вы могли бы вычесть вторую или миллисекунду из этого, чтобы сделать это 11:59:59 в указанную дату:

TheDate BETWEEN @EnteredBeginDate AND DATEADD(second, -1, (DATEADD(day, 1, @EnteredEndDate)))

Ответ 2

Если вы используете SQL Server 2008 или 2008 R2, вы можете использовать новый тип данных DATE:

TheDate BETWEEN CAST(@EnteredBeginDate AS DATE) AND CAST(@EnteredEndDate AS DATE)

Отбрасывает временную часть и смотрит только на дату

Ответ 3

Если вы используете SQL Server 2008, сделайте следующее:

TheDate BETWEEN cast(@EnteredBeginDate as date) AND cast(@EnteredEndDate as date)

Ответ 4

TheDate BETWEEN @EnteredBeginDate AND dateadd(day, 1, @EnteredEndDate)

Ответ 5

Если только дата передается в SQL Server, она будет делать время 12:00 AM. Таким образом, конечная дата в промежутке между 9 и 9/2009 12:00. Просто добавьте день или измените дату, переданную в запрос, чтобы включить правильное время.