SQL中DATEADD和DATEDIFF的用法

SQL中DATEADD和DATEDIFF的用法,第1张

SQL中DATEADD和DATEDIFF的用法,第2张

通常,您需要获取当前日期并计算一些其他日期。例如,您的程序可能需要判断一个月的第一天或最后一天。你们大多数人可能知道如何划分日期(年、月、日等。),然后就用分好的年、月、日等。在几个函数中计算出你需要的日期!
在本文中,我将告诉您如何使用DATEADD和DATEDIFF函数来计算一些您可能在程序中使用的不同日期。
在使用本文中的示例之前,您必须注意以下问题。大部分的例子可能不会在不同的机器上执行,结果也可能不同,这完全是由星期几是星期几的设置决定的。第一天设置决定了系统将哪一天作为一周的第一天。以下所有示例都基于星期日作为一周的第一天,即第一天设置为7。如果您的第一天设置不同,您可能需要调整这些示例,使它们符合不同的第一天设置。您可以通过@@DATEFIRST函数检查第一天的设置。
为了理解这些示例,让我们先回顾一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的时间间隔总数,如小时、天、周、月和年。DATE函数计算一个日期,通过加上或减去时间间隔得到一个新的日期。若要了解DATEDIFF和DATEADD函数以及时间间隔的详细信息,可以阅读Microsoft联机帮助。
使用DATEDIFF和DATEADD函数计算日期与最初考虑从当前日期转换到所需日期的方式略有不同。你必须考虑时间间隔。比如当前日期和你想要的日期之间有多少时间,或者今天和某一天之间有多少时间(比如190011),等等。了解如何关注时间间隔将有助于您轻松理解我的不同日期计算示例。
一个月的第一天
第一个例子,我会告诉你如何从当前日期到这个月的最后一天。请注意:这个例子和本文中的其他例子将只使用DATEDIFF和DATEADD函数来计算我们想要的日期。在每个例子中,要计算的日期将通过计算之前的时间间隔,然后加减得到。
这是计算一个月的第一天的SQL脚本:
Select DateAdd (mm,datediff (mm,0,getdate()),0)
我们把这个语句分开来看看它是怎么工作的。核心函数是getdate(),大多数人都知道它是一个返回当前日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())将计算当前日期和日期“19000101 00:00:00.000”之间的月数。记住:周期和时间变量是从“19000101 00:00:00.000”开始计算的,就像毫秒一样。这就是为什么可以在DATEDIFF函数中将第一个时间表达式指定为“0”。下一个函数是DATEADD,它将当前日期的月数增加到“19000101”。通过增加预定义日期“19000101”和当前日期的月数,我们可以得到这个月的第一天。此外,计算日期的时间部分将是“00:00:00.000”。
这种计算技巧是先计算当前日期与“19000101”之间的时间间隔数,再加上“19000101”得到一个特殊的日期。这种技术可以用来计算许多不同的日期。下一个示例也使用这种技术从当前日期生成不同的日期。
本周星期一
在这里,我用周的间隔(wk)来计算哪一天是本周的星期一。
Select DateAdd (wk,datediff (wk,0,getdate()),0)
一年的第一天
现在,以一年的时间间隔(yy)显示一年的第一天。
Select dateadd (yy,datediff (yy,0,getdate()),0)
季度的第一天
如果您想计算本季度的第一天,此示例将告诉您如何操作。
select dateadd (QQ,datediff (QQ,0,getdate()),0)
当天的午夜
曾经需要getdate()函数截取时间部分以便返回时间值,所以会考虑当前日期是否为午夜。在这种情况下,此示例使用DATEDIFF和DATEADD函数来获取午夜时间。
Select DATEADD (DD,DATEDIFF (DD,0,GetDate()),0)
深入到DATEDIFF和DATEADD函数的计算中
可以看到,通过使用DATEDIFF和DATEADD函数的简单计算,可以找到许多可能有意义的不同日期。
到目前为止的所有例子都只是计算当前时间与“19000101”之间的时间间隔数,然后将其加到“19000101”的时间间隔上,从而计算出日期。假设你修改时间间隔的个数,或者用不同的时间间隔调用DATEADD函数,或者减去时间间隔而不是增加时间间隔,通过这些小的调整,你可以找到很多不同的日期。
下面是四个使用另一个DATEADD函数计算最后一天的示例,以替换DATEADD函数前后的两个时间间隔。
上月最后一天
这是一个计算上月最后一天的例子。它是从一个月的最后一天的例子中减去3毫秒得到的。需要记住的一点是,在Sql
Server中,时间精确到3毫秒。这就是为什么我需要减去3毫秒来得到我想要的日期和时间。
Select DateAdd (ms,3,dateAdd (mm,datediff (mm,0,getDate()),0)]
计算日期的时间部分包含Sql
Server可以记录的一天中的最后一刻(" 23: 59: 59: 59
去年的最后一天
连接上例。为了得到去年的最后一天,需要从今年的第一天减去3毫秒。
select dateadd (ms,3,dateadd (yy,datediff (yy,0,getdate()),0)]
本月最后一天
现在为了得到本月最后一天,我需要稍微修改一下得到上月最后一天的语句。修改需要将当前日期与DATEDIFF的“19000101”进行比较,返回的时间间隔加1。通过加上1个月,我算出了下个月的第一天,然后减去3毫秒,这样就算出了这个月的最后一天。这是计算本月最后一天的SQL脚本。
select dateadd (ms,3,dateadd (mm,datediff (m,0,getdate ())+1,0)]
今年的最后一天
这个你现在应该掌握了。这是计算今年最后一天的脚本
select dateadd。
这个月的第一个星期一
好了,现在是最后一个例子。这里我想算一下这个月的第一个星期一。这是计算的脚本。
select dateadd (wk,datediff (wk,0,dateadd (DD,6datepart (day,getdate()),getdate()),0)
在这个例子中,我使用了“本周星期一”的脚本,做了一点修改。修改的部分是将原脚本的“getdate()”部分替换为本月6日,在计算中将当前日期替换为本月6日,这样计算就可以得到本月的第一个星期一。
总结
通过使用这种计算日期时间间隔的数学方法,我发现为了显示两个日期之间的间隔,一个有用的日历是有价值的。请注意,这只是计算这些日期的一种方法。请记住,有许多方法可以获得相同的计算结果。如果你有其他方法,那太好了。如果你没有,我希望这些例子能给你一些启发,当你想用DATEADD和DATEDIFF函数计算你的程序可能用到的日期时。
附录,其他日期处理方法
1)删除小时和分钟
declare @ datetime
set @ = getdate()' 200371 10:00:00 '
select @,dateadd (day @),0)
显示星期几
select datename(weekday, Getdate ()
3)如何获取某月的天数
declare @ m int
set @ m =二月
select datediff (day,' 2003 '+cast(@ m as
varchar)2003 '+cast(@ m+1as
varchar)+' 15 ')
另外,获取本月的天数
select datediff(day,cast(month cast(month(getdate())as
varchar)+' '+cast(month(getdate ())+1 as
varchar)+' 15 ')
或者使用计算本月最后一天的脚本,然后使用day函数区域
select day (dateadd (ms,3,dateadd (mm,
datediff (m,0,getdate())+1,0))
4)判断是否为
dateadd(ms,3,DATEADD(yy,DATEDIFF(yy,0,getdate()),
0)))when 28 then '偶数年' else '闰年' end
or
select case
DATEDIFF(day,datename (year,getdate ())+'0201 ',dateadd DateName (Year,GetDate())+' 0201 ')]
when 28 then '偶数年' else '闰年'

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQL中DATEADD和DATEDIFF的用法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情