常用比较日期的SQL语句

玛丽莲梦兔
751次浏览
2021年02月20日 06:44
最佳经验
本文由作者推荐

-

2021年2月20日发(作者:圆圆像个瓜)


sql server


日期比较日期查询常用语句



关键字


: sql


sql server


日期比较日期查询常用语句


< br>通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的


第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分割(年、月、日等)

< br>,然后


仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期! 在这篇文章里,


我将告诉你如何使用


DATEADD

< p>


DATEDIFF


函数来计算出在你的程序中可 能你要用到的一些不


同日期。



在使 用本文中的例子之前,你必须注意以下的问题。大部分可能不是所有例子在不同的机器


上 执行的结果可能不一样,这完全由哪一天是一个星期的第一天这个设置决定。第一天


(< /p>


DATEFIRST



设定决定了你的系 统使用哪一天作为一周的第一天。


所有以下的例子都是以星


期天 作为一周的第一天来建立,也就是第一天设置为


7


。假如你的第 一天设置不一样,你可


能需要调整这些例子,使它和不同的第一天设置相符合。你可以通 过


@@DATEFIRST


函数来检


查 第一天设置。




< /p>


为了理解这些例子,


我们先复习一下


DA TEDIFF



DATEADD


函数。


DATEDIFF


函数计算


两个日期之 间的小时、天、周、月、年等时间间隔总数。


DATEADD


函 数计算一个日期通过给


时间间隔加减来获得一个新的日期。


要了 解更多的


DATEDIFF



DATE ADD


函数以及时间间隔可


以阅读微软联机帮助。





使用


DATEDIFF



DATEADD< /p>


函数来计算日期,和本来从当前日期转换到你需要的日期


的考虑方 法有点不同。你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的


日期之 间有多少时间间隔,或者,从今天到某一天(比如


1900-1-1

)之间有多少时间间隔,


等等。理解怎样着眼于时间间隔有助于你轻松的理解我的不 同的日期计算例子。




一个月的第一天





第一个例子,


我将告诉 你如何从当前日期去这个月的最后一天。


请注意:


这个例子以< /p>


及这篇文章中的其他例子都将只使用


DATEDIFF

< p>


DATEADD


函数来计算我们想要的日期。< /p>


每一


个例子都将通过计算但前的时间间隔,然后进行加减来得到想 要计算的日期。





这是计算一个月第一天的


SQL


脚本:



SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)




我们把这个语句分开 来看看它是如何工作的。


最核心的函数是


getdate()< /p>



大部分人


都知道这个是返回当前的日期 和时间的函数。


下一个执行的函数


DATEDIFF(mm,0 ,getdate())


是计算当前日期和


00:00:00.000


这个日期之间的月数。


记住:< /p>


时期和时间变量


和毫秒一样是从



开始计算的。这就是为什么你可以在


DATEDIFF

< br>函数中指定第一个时间表达式为




下一个函数是


DATEADD



增加 当前日期到



的月数。通过增加预定义的日期


和当前日期的月数,我们可以获得这个月的第


一天。另外, 计算出来的日期的时间部分将会是







这个计算的技巧是先 计算当前日期到



的时间间隔数,然后把它加到

< br>


上来获得特殊的日期,这个技巧可以用来计算很多不同的日期。下一个例子也


是用这个技巧从当前日期来产生不同的日期。





本周的星期一





这里我是用周


(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)



当天的半夜





曾经需要通过


getd ate()


函数为了返回时间值截掉时间部分,


就会考虑到当前 日期是


不是在半夜。假如这样,这个例子使用


DATEDIFF



DATEADD


函数来获得半夜的时 间点。




SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0)



深入


DATEDIFF



DATEADD


函数计算





你可以明白,通过使 用简单的


DATEDIFF



DATE ADD


函数计算,你可以发现很多不同


的可能有意义的日期。< /p>




< br>目前为止的所有例子只是仅仅计算当前的时间和



之间的时 间间隔数量,


然后把它加到



的时间间隔 上来计算出日期。假定你修改时间间隔的数量,或者


使用不同的时间间隔来调用


DATEADD


函数,或者减去时间间隔而不是增加,那么通过这些小< /p>


的调整你可以发现和多不同的日期。





这里有四个例子使用另外一个

< br>DATEADD


函数来计算最后一天来分别替换


DATE ADD


函数


前后两个时间间隔。




上个月的最后一天





这是一个计算上个月 最后一天的例子。


它通过从一个月的最后一天这个例子上减去


3

-


-


-


-


-


-


-


-