在SQL中按日期过滤

时间:2012-12-13 22:30:01

标签: sql sql-server tsql

我的表中有一列用于日期(DateTime),我正在尝试创建一个WHERE子句,表示WHERE dates BETWEEN 12-11-2012 and 12-13-2012

日期列的样本值= 2012-05-24 00:38:40.260

我想说明MM-DD-YYYY和MM-DD-YYYY之间的日期。

我试过

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

但似乎不起作用。 “语法不正确=”

请帮忙

编辑:

感谢各种选项和描述人员。得到了@ RichardTheKiwi的选择。

3 个答案:

答案 0 :(得分:17)

如果您的dates列不包含时间信息,则可以使用以下内容:

WHERE dates BETWEEN '20121211' and '20121213'

但是,如果您的dates列实际上是日期时间,则需要此

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一起用于明确的日期文字。

答案 1 :(得分:3)

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

答案 2 :(得分:1)

嗯,你试图将Date与Nvarchar进行比较,这是错误的。应该是

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

如果是date1,则为date2字符串;服务器会在过滤之前将它们转换为日期类型。