【发布时间】:2012-03-19 09:36:52
【问题描述】:
我正在尝试编写一个选择查询,其中我的 OrderDate 介于两个月之间。 这是我目前的代码。
declare @FromMonth datetime
declare @ToMonth datetime
set @FromMonth = '20111201'
set @ToMonth = '20120301'
select *
from Order o
where o.OrderDate between @FromMonth and @ToMonth
这几乎可以工作,除了它还查看月份中的某天,这意味着在此示例中它不会选择我的 @ToMonth 中的所有日期
我使用的是 Sql Server 2012
编辑
为了更清楚,我不想相信我的@FromMonth 和@ToMonth 输入来知道该月的最后一天。以上只是一个示例来说明我的问题。
【问题讨论】:
-
你试过了吗? -> 设置@ToMonth = '20120331'
-
这是因为您的日期时间有一个日期,并且您没有指定您只希望 BETWEEN 关心年和月。尝试使用 MONTH() 和 YEAR() 函数,或设置您的ToMonth 到该月的最后一天
-
@OriesokVlassky - 不,真的,请不要这样做。它将破坏使用 INDEX SEEK 的能力,并会产生完整的扫描。如果您想要任何体面的性能,请不要将搜索字段包装在函数中。
-
@gulbaek - 在您的编辑中,您说您不想相信您的输入。请参阅@Nikola 使用 DATEADD/DATEDIFF 将值舍入到月初的答案,以便您可以在
>=和<中使用它们。您可能会决定对输入进行稍微不同的清理,但是如果您能理解该答案,那么您应该可以按照自己的喜好对输入进行清理:)
标签: sql datetime sql-server-2012