本帖最后由 wynlc 于 2012-12-03 13:44:35 编辑

解决方案 »

  1.   

    详见:http://blog.csdn.net/dba_huangzj/article/details/7657979--定义给定的一天
    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 '下季季末'
      

  2.   


    --下个月第一天
    select dateadd(mm,1,DATEADD(dd,-day(getdate())+1,getdate()))
    --下个月最后一天
    select dateadd(dd,-1,dateadd(mm,2,DATEADD(dd,-day(getdate())+1,getdate())))
    --下下个月第一天
    select dateadd(mm,2,DATEADD(dd,-day(getdate())+1,getdate()))
    --下下个月最后一天
    select dateadd(dd,-1,dateadd(mm,3,DATEADD(dd,-day(getdate())+1,getdate())))/*-----------------------
    2013-01-01 14:02:17.420(1 行受影响)
    -----------------------
    2013-01-31 14:02:17.420(1 行受影响)
    -----------------------
    2013-02-01 14:02:17.420(1 行受影响)
    -----------------------
    2013-02-28 14:02:17.420(1 行受影响)
    */
      

  3.   

    declare @dt datetime
    set @dt=getdate()
    select convert(varchar(7),dateadd(m,1,@dt),120)+'-01',convert(varchar(10),dateadd(d,-1,convert(varchar(7),dateadd(m,2,@dt),120)+'-01'),120)
    select convert(varchar(7),dateadd(m,2,@dt),120)+'-01',convert(varchar(10),dateadd(d,-1,convert(varchar(7),dateadd(m,3,@dt),120)+'-01'),120)
    /*
               
    ---------- ----------
    2013-01-01 2013-01-31(1 行受影响)           
    ---------- ----------
    2013-02-01 2013-02-28(1 行受影响)
    */
      

  4.   

    select replace(CONVERT(varchar(100), dateadd(month,1,getdate()), 20),'-','/') --当前时间加一个月select replace(CONVERT(varchar(100), dateadd(month,2,getdate()), 20),'-','/') --当前时间加两个月
    楼上几位太强大了 谢谢
      

  5.   

    Quote: 引用 4 楼 wynlc 的回复:

    楼上几位太强大了 
    Quote:

    学习了……
      

  6.   


    select GETDATE()--得到获取当前时间下个月的第一天时间和最后一天时间
    Select DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,1,getdate())), 0)
    Select DATEADD(SECOND,-1,DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,2,getdate())), 0))--获取当前时间下下个月的第一天时间和最后一天时间
    Select DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,2,getdate())), 0)
    Select DATEADD(SECOND,-1,DATEADD(MM, DATEDIFF(mm,0,DATEADD(mm,3,getdate())), 0))
    --结果
    --当前时间
    --2012-12-04 19:30:45.610--得到获取当前时间下个月的第一天时间和最后一天时间
    --2013-01-01 00:00:00.000
    --2013-01-31 23:59:59.000--获取当前时间下下个月的第一天时间和最后一天时间
    --2013-02-01 00:00:00.000
    --2013-02-28 23:59:59.000