使用SQL Server 2005我有一个包含日期时间值的字段.
我想要做的是创建2个查询:
比较查看存储的日期时间是否与当前日期的月份相同
比较查看存储的日期时间是否与当前日期相同
可能有一个简单的解决方案,但我一直在用我能找到的各种样品打砖墙,有什么想法吗?
提前致谢.
比较日期的各个部分:
WHERE YEAR( columnName ) = YEAR( getDate() )
虽然其他答案都有效,但它们都会遇到同样的问题:它们会对列应用转换,因此永远不会在该列上使用索引.
要在没有转换的情况下搜索日期,您需要一些内置函数和一些数学运算.示例如下:
--create a table to hold our example values create table #DateSearch ( TheDate datetime not null ) insert into #DateSearch (TheDate) --today select getdate() union all --a month in advance select dateadd(month, 1, getdate()) union all --a year in advance select dateadd(year, 1, getdate()) go --declare variables to make things a little easier to see declare @StartDate datetime, @EndDate datetime --search for "same month+year as current date" select @StartDate = dateadd(month, datediff(month, 0, getdate()), 0), @EndDate = dateadd(month, datediff(month, 0, getdate()) + 1, 0) select @StartDate [StartDate], @EndDate [EndDate], TheDate from #DateSearch where TheDate >= @StartDate and TheDate < @EndDate --search for "same year as current date" select @StartDate = dateadd(year, datediff(year, 0, getdate()), 0), @EndDate = dateadd(year, datediff(year, 0, getdate()) + 1, 0) select @StartDate [StartDate], @EndDate [EndDate], TheDate from #DateSearch where TheDate >= @StartDate and TheDate < @EndDate
该声明为避免转换所做的是找到大于或等于当前时间段(月或年)开始的所有值,并且所有值小于下一个(无效)时间段的开头.这解决了我们的索引问题,并且还减轻了与DATETIME类型中的3ms舍入相关的任何问题.