SQL Server:获取本月最后一天[转]

Posted 覆雨翻云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server:获取本月最后一天[转]相关的知识,希望对你有一定的参考价值。

方法一:set @EndDate = dateadd(month, datediff(month, -1, @StoredDate), -1) 

                @StoredDate为本月的任意一天

                这里datediff(month, -1, @StoredDate)会返回从1900年1月1日为基准,算出此基准到@StoredDate的所有月数,再加上1(如果第二个参数为0,则不用加1)

                dateadd(month, 0, 0) 返回:1900-01-01 00:00:00.000

                dateadd(month, 0, -1) 返回:1899-12-31 00:00:00.000所以最后一个参数表示天数,正数就加,负数为减;  

                dateadd(month, 1, 0) 返回:1900-02-01 00:00:00.000所以第二个参数表示月数,正数为加,负数为减

                由此可以推出:dateadd(month, datediff(month, -1, @StoredDate), -1) 为从1900年1月1日到@StoredDate的月数加1,转化为现在的月份(并且是第一天),然后天数减去1,也可以将datediff(month, -1, @StoredDate)理解为获取到下个月的所有月数,然后在此基础上再减去1天,就是@StoredDate所在本月最后一天

 

方法二:set @EndDate = dateadd(ms, -3, dateadd(MONTH, datediff(MONTH, 0, @StoredDate) + 1, 0))

                @StoredDate为本月的任意一天

                同上,datediff(MONTH, 0, @StoredDate) + 1表示获取到本月的所有月数再加1,即获取到下月的所有月数,dateadd(MONTH, datediff(MONTH, 0, @StoredDate) + 1, 0)则表示获取下月第一天,再减去3个毫秒,得到本月最后一天的23:59:59.997,这里只是取了个巧而已

 

这两种方法,虽然没有什么好坏之分,只要结果正确就行,但是个人觉得其实第一种方法更简便些,毕竟少绕一次

以上是关于SQL Server:获取本月最后一天[转]的主要内容,如果未能解决你的问题,请参考以下文章

SQL SERVER中求上月本月和下月的第一天和最后一天 DATEADD DATEDIFF

Sql Server中查询今天昨天本周上周本月上月数据

Java获取本月最后一天问题

在python中从年月获取本月的最后一天[重复]

js获取本月或指定月份的最后一天

php本月的最后一天怎么取