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. Просто добавьте день или измените дату, переданную в запрос, чтобы включить правильное время.