zoukankan      html  css  js  c++  java
  • 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,这里只是取了个巧而已

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

  • 相关阅读:
    复利计算器2.01
    复利计算器2.0
    0429团队3.0
    0428 团队项目合作2.0作业
    "数学口袋精灵"bug
    操作系统-实验2
    博客评论
    复利计算升级
    0408 结对合作
    0406复利计算5.0
  • 原文地址:https://www.cnblogs.com/railgunman/p/9745255.html
Copyright © 2011-2022 走看看