在写一个存储过程的时候碰到这个问题:存储过程参数传入的年份和月份是INT类型:         @YEAR INT,
@MONTH DATETIME在存储过程中我要得到这个月份的第一天和最后一天,然后根据这个时间段去查询数据,这个要怎么写呢?

解决方案 »

  1.   

    cast(ltrim(@year)+'-'+ltrim(@month)+'-01' as datetime)
      

  2.   

    有点小错误,上面的@MONTH 也应该是INT类型
      

  3.   

    第一天:ltrim(@YEAR) + '-' + ltrim(@MONTH) + '-01'最后一天
    dateadd(mm,1,cast(ltrim(@YEAR) + '-' + ltrim(@MONTH) + '-01' as datetime)) - 1
      

  4.   

    Declare @Checkdate = '2010-10-26'
    SELECT Dateadd(dd,-1,CONVERT(datetime,CONVERT(char(4),Case when Month(@checkdate) = 12 Then year(@checkdate)+1 Else year(@checkdate) End)+'-'+CONVERT(varchar(2),Case  when Month(@checkdate) = 12 Then 1 Else month(@checkdate)+1 End)+'-01',101))
    得到当前日期所在月的最后一天。可以参考下
      

  5.   

    declare @YEAR INT
    declare @MONTH int
    set @year = 2010
    set @MONTH = 10select ltrim(@YEAR) + '-' + ltrim(@MONTH) + '-01' 第一天,
           dateadd(mm,1,cast(ltrim(@YEAR) + '-' + ltrim(@MONTH) + '-01' as datetime)) - 1 最后一天/*
    第一天                          最后一天                                                   
    ---------------------------- ------------------------------------------------------ 
    2010-10-01                   2010-10-31 00:00:00.000(所影响的行数为 1 行)
    */set @year = 2010
    set @MONTH = 12
    select ltrim(@YEAR) + '-' + ltrim(@MONTH) + '-01' 第一天,
           dateadd(mm,1,cast(ltrim(@YEAR) + '-' + ltrim(@MONTH) + '-01' as datetime)) - 1 最后一天
    /*
    第一天                          最后一天                                                   
    ---------------------------- ------------------------------------------------------ 
    2010-12-01                   2010-12-31 00:00:00.000(所影响的行数为 1 行)
    */