Фильтр по датам в SQL

у меня есть столбец в моей таблице для дат (DateTime), и я пытаюсь создать предложение WHERE, которое говорит:WHERE dates BETWEEN 12-11-2012 and 12-13-2012

примерное значение столбца дат = 2012-05-24 00:38: 40.260

Я хочу сказать, где даты между ММ-ДД-гггг и ММ-ДД-гггг.

Я пытался сделать

WHERE dates BETWEEN ((convert(nvarchar(10), dates,110) = '2012-12-12') AND (convert(nvarchar(10), dates,110) = '2012-12-12'))

но, похоже, не работает. "Неправильный синтаксис около ="

пожалуйста, помогите

EDIT:

Спасибо за различные варианты и описание ребята. Он работает с параметрами @RichardTheKiwi.

3 ответов


если dates столбец не содержит информацию о времени, вы можете уйти с:

WHERE dates BETWEEN '20121211' and '20121213'

однако, учитывая ваш dates столбец на самом деле datetime, вы хотите это

WHERE dates >= '20121211'
  AND dates < '20121214'  -- i.e. 00:00 of the next day

другой вариант для SQL Server 2008 и далее, который сохраняет SARGability (возможность использования индекса для хорошей производительности):

WHERE CAST(dates as date) BETWEEN '20121211' and '20121213'

Примечание: всегда используйте формат ISO-8601 YYYYMMDD с SQL Server для однозначной даты константы.


WHERE dates BETWEEN (convert(datetime, '2012-12-12',110) AND (convert(datetime, '2012-12-12',110))

Ну, вы пытаетесь сравнить дату с Nvarchar, что неправильно. Должно быть

Where dates between date1 And date2
-- both date1 & date2 should be date/datetime

Если date1, date2 строки; сервер преобразует их в тип даты перед фильтрацией.