我想做月统计报表,但是发现报表中每个月最后一天发生的数没有被包括。代码如下:
//统计9月份的数据
declare @year char(10),@month char(10),@month1 char(10)  set @year='2006'
set @month='9'
set @month1='10'  //月份加1print rtrim(@year)+'-'+rtrim(ltrim(@month))+'-1'//下个月1号减1就是上个月最后一天
print cast(rtrim(@year)+'-'+rtrim(ltrim(@month1))+'-1' as datetime)-1  
if (rtrim(ltrim(@month))='12')
begin
  set @month1='1'
end
--------------------------------------------------------
2005-9-1
09 30 2005 12:00AM
--------------------------------------------------------
为什么9月30号的数没有被统计呢?输出的两个时间格式不一样。AM好像是上午。请问我该怎样得到每个月的最后一天的时间戳啊?

解决方案 »

  1.   

    declare @year char(10),@month char(10),@month1 char(10)  set @year='2006'
    set @month='09'
    set @month1='10'  --月份加1print rtrim(@year)+'-'+rtrim(@month)+'-01'
    print rtrim(@year)+'-'+rtrim(@month1)+'-01'--下个月1号减1就是上个月最后一天
    print convert(varchar(10) , (cast(rtrim(@year)+'-'+rtrim(@month1)+'-01' as datetime) - 1),120)
    if (rtrim(ltrim(@month))='12')
    begin
      set @month1='1'
    end
    2006-09-01
    2006-10-01
    2006-09-30
      

  2.   

    没太看懂楼主的意思如果你的日期里是有时间的话,比如'2006-11-02 09:56:41.920'那统计数据的时候可以用date < '2006-11-03 00:00:00.000'
      

  3.   


    declare @year char(10),@month char(10),@month1 char(10)  set @year='2006'
    set @month='9'
    set @month1='10'  --月份加1print convert(datetime, rtrim(@year)+'-'+rtrim(ltrim(@month))+'-1', 120)
    --下个月1号减1就是上个月最后一天
    print convert(datetime, rtrim(@year)+'-'+rtrim(ltrim(@month1))+'-1', 120)-1if (rtrim(ltrim(@month))='12')
    begin
      set @month1='1'
    end
      

  4.   

    你的时间显示小时和分钟不,要是的话这就是问题所在了
    9月30号,是那天的开始,所以要是带小时和分钟的话,就统计不出来了。
    可以把日期转化为同一的格式
    如convert(varchar, getdate(), 111)这样不带小时和分钟的格式。
      

  5.   

    統計一個月的紀錄,也可以讓其< 下個月的1號就可以了
    date>='2005-09-01 00:00:00.000'  and  date<'2005-10-01 00:00:00.000'