当前位置:  开发笔记 > 编程语言 > 正文

仅使用一年中的当月日期与存储的日期时间进行比较

如何解决《仅使用一年中的当月日期与存储的日期时间进行比较》经验,为你挑选了2个好方法。

使用SQL Server 2005我有一个包含日期时间值的字段.

我想要做的是创建2个查询:

    比较查看存储的日期时间是否与当前日期的月份相同

    比较查看存储的日期时间是否与当前日期相同

可能有一个简单的解决方案,但我一直在用我能找到的各种样品打砖墙,有什么想法吗?

提前致谢.



1> Ryan Emerle..:

比较日期的各个部分:

WHERE YEAR( columnName ) = YEAR( getDate() )



2> Taylor Gerri..:

虽然其他答案都有效,但它们都会遇到同样的问题:它们会对列应用转换,因此永远不会在该列上使用索引.

要在没有转换的情况下搜索日期,您需要一些内置函数和一些数学运算.示例如下:

--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舍入相关的任何问题.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有