码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-10-05 18:48:58      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:store   tor   结果   并且   理解   sql   没有   最后一天   负数   

方法一: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:获取本月最后一天[转]

标签:store   tor   结果   并且   理解   sql   没有   最后一天   负数   

原文地址:https://www.cnblogs.com/railgunman/p/9745255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!