知道年份和月份,如何求出 1.这个月有多少天,2.这个月末是几号.前一月的月末是几号?后一月的月末是几号?

解决方案 »

  1.   

    参考:-- 当前日期,取本月日期范围,上月日期范围,下月日期范围-- 当前日期
    select getdate() 当前日期-- 上月日期范围
    select 
    convert(varchar(7) ,dateadd(month ,-1 , getdate()),121)+ '-01' 上月起始日期,
    convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,getdate(),121)+ '-01' as datetime)) ,120)-- 取本月日期范围
    select 
    convert(varchar(7) ,getdate(),120)+ '-01' 本月起始日期, 
    convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 1 , getdate()),120)+ '-01' as datetime)),120)-- 下月日期范围
    select 
    convert(varchar(10),cast(convert(varchar(7),dateadd(month , 1 , getdate()),120)+ '-01' as datetime),120) as 下月起始日期,
    convert(varchar(10),dateadd(day , -1 , cast(convert(varchar(7) ,dateadd(month , 2 , getdate()),120)+ '-01' as datetime)),120)
      

  2.   

    declare @year int ,@month int
    set @year =2006
    set @month =9
    --1
    select datediff(day,rtrim(@year)+'-'+rtrim(@month)+'-1',rtrim(@year+@month/12)+'-'+rtrim((@month+1)%12)+'-1')
    --2
    select datepart(day,dateadd(day,-1,rtrim(@year+@month/12)+'-'+rtrim((@month+1)%12)+'-1'))
    --后面的参照上面
      

  3.   

    declare @年份 int,@月份 int
    set @年份=2006
    set @月份=9--1.这个月有多少天,
    select datediff(day,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')),dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01'))) as 天数
    --or: 
    select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 天数--2.这个月末是几号.前一月的月末是几号?后一月的月末是几号?
    select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 月末是几号,
    datepart(day,dateadd(day,-1,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')))) as 前一月的月末是几号,
    datepart(day,dateadd(day,-1,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')))) as 后一月的月末是几号
    --结果
    天数          
    ----------- 
    30(所影响的行数为 1 行)天数          
    ----------- 
    30(所影响的行数为 1 行)月末是几号       前一月的月末是几号   后一月的月末是几号   
    ----------- ----------- ----------- 
    30          31          31(所影响的行数为 1 行)
      

  4.   

    更正declare @年份 int,@月份 int
    set @年份=2006
    set @月份=9--1.这个月有多少天,
    select datediff(day,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')),dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01'))) as 天数
    --or: 
    select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 天数--2.这个月末是几号.前一月的月末是几号?后一月的月末是几号?
    select datepart(day,dateadd(day,-1,dateadd(month,@月份,dateadd(year,@年份-2000,'2000-01-01')))) as 月末是几号,
    datepart(day,dateadd(day,-1,dateadd(month,@月份-1,dateadd(year,@年份-2000,'2000-01-01')))) as 前一月的月末是几号,
    datepart(day,dateadd(day,-1,dateadd(month,@月份+1,dateadd(year,@年份-2000,'2000-01-01')))) as 后一月的月末是几号
    --结果
    天数          
    ----------- 
    30(所影响的行数为 1 行)天数          
    ----------- 
    30(所影响的行数为 1 行)月末是几号       前一月的月末是几号   后一月的月末是几号   
    ----------- ----------- ----------- 
    30          31          31(所影响的行数为 1 行)
      

  5.   

    a. 一个月的第一天
    SELECT  DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)  
    b. 本周的星期一
    SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0) 
    c. 一年的第一天
    SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  
    d. 季度的第一天
    SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  
    e. 上个月的最后一天 
    SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  
    f. 去年的最后一天
    SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)) 
    g. 本月的最后一天
    SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
    h. 本月的第一个星期一
    select  DATEADD(wk,  DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ,  0)      
    i. 本年的最后一天
    SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))
      

  6.   

    --原来写的有错误,更正下
    declare @year int ,@month int
    set @year = 2006
    set @month = 9
    --1
    select datediff(day,rtrim(@year)+'-'+rtrim(@month)+'-1',rtrim(@year+@month/12)+'-'+rtrim(case @month when 12 then 1 else @month+1 end)+'-1')
    --2
    select datepart(day,dateadd(day,-1,rtrim(@year+@month/12)+'-'+rtrim(case @month when 12 then 1 else @month+1 end)+'-1'))
    --后面的参照上面