Фильтр по датам в 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 для однозначной даты константы.
Ну, вы пытаетесь сравнить дату с Nvarchar, что неправильно. Должно быть
Where dates between date1 And date2
-- both date1 & date2 should be date/datetime
Если date1, date2 строки; сервер преобразует их в тип даты перед фильтрацией.