31

我的表中有一个日期列(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 的选项一起使用。

4

3 回答 3

45

如果您的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 以获得明确的日期文字。

于 2012-12-13T22:31:54.027 回答
6
WHERE dates BETWEEN (convert(datetime, '2012-12-12',110) AND (convert(datetime, '2012-12-12',110))
于 2012-12-13T22:36:07.373 回答
1

好吧,您正在尝试将 Date 与 Nvarchar 进行比较,这是错误的。应该

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

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

于 2012-12-13T22:36:12.963 回答