介绍
在MSSQL中,获取某个月份的末尾日期是一个非常常见的需求,特别是在需要生成一些财务或报表文件的时候。一般来说,我们可以使用DATEADD和DATEDIFF函数来得到需要的结果。
使用DATEADD和DATEDIFF函数
我们可以使用DATEDIFF函数来获取某个日期与1900年1月1日之间的天数,进而计算出需要的月份的天数。假设我们需要获取2019年8月份的末尾日期,可以使用以下SQL语句:
SELECT DATEADD(MILLISECOND,-3,DATEADD(MONTH, DATEDIFF(MONTH,0,'2019-08-01')+1,0))
执行以上查询,可以得到结果为:
2019-08-31 23:59:59.997
这里我们使用了DATEADD函数来进行时间的计算,将指定日期的月份加1,得到下一个月。同时使用DATEDIFF函数获取2019年8月份与1900年1月1日之间的天数,这个值将会是本月的日期数。最终将这个得到的结果减去3毫秒,得到本月的最后一天最后一秒的时间。
使用EOMONTH函数
MSSQL 2012开始,我们可以使用EOMONTH函数来更加方便的获取某个月份的末尾日期。假如我们需要获取2020年2月份的末尾日期,可以使用以下SQL语句:
SELECT EOMONTH('2020-02-01')
执行以上查询,可以得到结果为:
2020-02-29
EOMONTH函数的使用方法非常简单,只需要传入一个日期,函数会自动计算它所在的月份的末尾日期。
使用DATEFROMPARTS函数
在MSSQL 2012之前,我们无法使用EOMONTH函数来获取某个月份的末尾日期。这时,我们可以使用DATEFROMPARTS函数,将我们想要的年份、月份、日期组合起来,得到所需的结果。以下是一个使用DATEFROMPARTS函数的例子:
SELECT DATEADD(DAY,-1,DATEFROMPARTS(2018,11,1))
执行以上查询,可以得到结果为:
2018-11-30
上面的例子中,我们使用DATEFROMPARTS函数传入了年份2018、月份11和日期1,得到了2018年11月1日。然后使用DATEADD函数将其加上11月份的天数,并减去1天,得到2018年11月份的最后一天。
总结
使用DATEADD和DATEDIFF函数以及EOMONTH函数和DATEFROMPARTS函数都可以完成获取某个月份的末尾日期这一需求,不过使用EOMONTH函数最为简便。