当前位置: 代码迷 >> Sql Server >> SQL时间计算,DATEADD()函数,该怎么解决
  详细解决方案

SQL时间计算,DATEADD()函数,该怎么解决

热度:750   发布时间:2016-04-24 09:02:48.0
SQL时间计算,DATEADD()函数
DECLARE @lastmonth1 DATE, @lastmonth2 DATE, @lastmonth3 DATE, @starttime DATE, @endtime DATE
SET @starttime = '2015-5-01'
SET @lastmonth2 = DATEADD(MONTH, -1, @starttime)
SET @lastmonth3 = DATEADD(DAY, -1, @starttime)
SET @lastmonth1 = DATEADD(MONTH, -1, @lastmonth3)
SET @endtime = DATEADD(MONTH, 1, @lastmonth3)
SELECT @lastmonth1, @lastmonth2, @lastmonth3, @starttime, @endtime


这里说明一下,@lastmonth1 是上上月的最后一天,@lastmonth2 是上月的第一天,@lastmonth3是上月的最后一天,@starttime 是本月第一天, @endtime 是本月最后一天。
如我上面给其余变量赋值之后呢,是有一点小问题的,如果本月是大月的话,那么,计算结果得出的@endtime 和 @lastmonth1 是有错误的,因为少了一天,DATEADD()的月份加1是默认加30天的,怎么解决这个问题呢。
------解决思路----------------------
不是加30天,你想当然了,你计算有问题
DECLARE @lastmonth1 DATETIME, @lastmonth2 DATETIME, @lastmonth3 DATETIME, @starttime DATETIME, @endtime DATETIME
SET @starttime = '2015-5-01'
SET @lastmonth2 = DATEADD(MONTH, -1, @starttime)
SET @lastmonth3 = DATEADD(DAY, -1, @starttime)
SET @lastmonth1 = DATEADD(DAY, -1, @lastmonth2)
SET @endtime = DATEADD(DAY, -1, DATEADD(MONTH, 1, @starttime))
SELECT @lastmonth1, @lastmonth2, @lastmonth3, @starttime, @endtime

------解决思路----------------------
DECLARE @lastmonth1 DATEtime, @lastmonth2 DATEtime, @lastmonth3 DATEtime, @starttime DATEtime, @endtime DATEtime
SET @starttime = '2015-5-01'
--上月的第一天
SELECT DATEADD(month,-1,DATEADD(dd,-DAY(@starttime)+1,@starttime)) AS '上月的第一天'
--上月的最后一天
SELECT DATEADD(ms,-3,DATEADD(mm, DATEDIFF(mm,0,@starttime),0))AS '上月的最后一天'
--本月的第一天
SELECT DATEADD(dd,-DAY(@starttime)+1,@starttime) AS '本月的第一天'
--本月的最后一天
SELECT DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,@starttime)+1,0)) AS '本月的最后一天'
--是上上月的最后一天
SELECT DATEADD(mm,-2,DATEADD(ms,-3,DATEADD(mm,DATEDIFF(m,0,@starttime)+1,0))) AS '是上上月的最后一天'