当前位置: 代码迷 >> Sql Server >> sqlserver怎么获得最后一周,最近一月的日期
  详细解决方案

sqlserver怎么获得最后一周,最近一月的日期

热度:70   发布时间:2016-04-27 11:44:40.0
sqlserver如何获得最后一周,最近一月的日期?
最近一周就是根据当天开始往前推7天的日期,
最近一月就是根据当天往前推30天的日期
该如何写呢?

------解决方案--------------------
SQL code
declare @StartDate dateselect @StartDate=DATEADD(DD,-6,GETDATE())select     DATEADD(DD,number,@StartDate) as NewDatefrom     master..spt_valueswhere     type='p' and number between 0 and 6/*NewDate-----------------------2012-06-212012-06-222012-06-232012-06-242012-06-252012-06-262012-06-27*/
------解决方案--------------------
SQL code
declare @StartDate dateselect @StartDate=DATEADD(DD,-30,GETDATE())select     DATEADD(DD,number,@StartDate) as NewDatefrom     master..spt_valueswhere     type='p' and number between 0 and 30/*NewDate-----------------------2012-05-282012-05-292012-05-302012-05-312012-06-012012-06-022012-06-032012-06-042012-06-052012-06-062012-06-072012-06-082012-06-092012-06-102012-06-112012-06-122012-06-132012-06-142012-06-152012-06-162012-06-172012-06-182012-06-192012-06-202012-06-212012-06-222012-06-232012-06-242012-06-252012-06-262012-06-27*/
------解决方案--------------------
SQL code
select dateadd(dd,-number,getdate()) as dtfrom master..spt_valueswhere type='P'and number between 0 and 6
------解决方案--------------------
探讨
好吧,结贴,我想的太复杂了,直接select getdate() -7不就可以了?

------解决方案--------------------
SQL code
--定义给定的一天DECLARE @Date DATETIME = GETDATE(); SELECT @Date AS '目前时间',DATEADD(DD,-1,@Date) AS '前一天',DATEADD(DD,1,@Date) AS '后一天'/*月计算*/,DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0) AS '月初'--在SQL Server中0 代表1900-01-01,通过月运算,保证日恒久为1号,DATEADD(DD,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '月末(精确到天)'--找到下月初再扣减1天,建议使用DATEADD而不要直接“-1”,DATEADD(SS,-1,DATEADD(MONTH,1+DATEDIFF(MONTH,0,@Date),0)) AS '月末(精确到datetime的小数位)',DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)-1,0) AS '上月第一天',DATEADD(DAY,-1,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date)) AS '上月最后一天',DATEADD(MONTH,DATEDIFF(MONTH,0,@Date)+1,0) AS '下月第一天',DATEADD(DAY,-1,DATEADD(MONTH,2,DATEADD(DAY,1-DATEPART(DAY,@Date),@Date))) AS '下月最后一天'/*周计算*/,DATEADD(WEEKDAY,1-DATEPART(WEEKDAY,@Date),@Date) AS '本周第一天(周日)'--注意此处与@@datefirst的值有关,DATEADD(WEEK,DATEDIFF(WEEK,-1,@Date),-1) AS '所在星期的星期日'--注意此处与@@datefirst的值有关,DATEADD(DAY,2-DATEPART(WEEKDAY,@Date),@Date) AS '所在星期的第二天'--注意此处与@@datefirst的值有关,其他天数类推,DATEADD(WEEK,-1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '上个星期第一天(周日)'--注意此处与@@datefirst的值有关,DATEADD(WEEK,1,DATEADD(DAY,1-DATEPART(WEEKDAY,@Date),@Date)) AS '下个星期第一天(星期日)'--注意此处与@@datefirst的值有关,DATENAME(WEEKDAY,@Date) AS '本日是周几',DATEPART(WEEKDAY,@Date) AS '本日是周几'--返回值 1-星期日,2-星期一,3-星期二......7-星期六/*年度计算*/,DATEADD(YEAR,DATEDIFF(YEAR,0,@Date),0) AS '年初',DATEADD(YEAR,DATEDIFF(YEAR,-1,@Date),-1) AS '年末',DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date)-1,0) AS '去年年初',DATEADD(YEAR,DATEDIFF(YEAR,-0,@Date),-1) AS '去年年末',DATEADD(YEAR,1+DATEDIFF(YEAR,0,@Date),0) AS '明年年初',DATEADD(YEAR,1+DATEDIFF(YEAR,-1,@Date),-1) AS '明年年末'/*季度计算*/,DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),0) AS '本季季初',DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),-1) AS '本季季末',DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date)-1,0) AS '上季季初',DATEADD(QUARTER,DATEDIFF(QUARTER,0,@Date),-1) AS '上季季末',DATEADD(QUARTER,1+DATEDIFF(QUARTER,0,@Date),0) AS '下季季初',DATEADD(QUARTER,2+DATEDIFF(QUARTER,0,@Date),-1) AS '下季季末'
  相关解决方案