给定参数年月,如何查询上月21日到本月20日之间的数据,如表:日期           数量
2011-12-21     10
2012-01-19     20     
2012-01-30     15
2012-02-10     35给定年月 2012-01 查询结果为
日期           数量
2012年01月     30给定年月 2012-02 查询结果为
日期           数量
2012年01月     45

解决方案 »

  1.   

    convert(varchar(7),col,120)
    cast(year(riqi)as varchar)+'年'+cast(month(col) as varchar)+'月'
    上课去了
    。。
      

  2.   

    select d,sum(qty) from a表 where ddate>=cast(d+'01' as date)-10 and ddate<=cast(d+'01' as date)+10 
      

  3.   


    /*
    给定参数年月,
    如何查询上月21日
    到本月20日之间的
    数据,如表:日期 数量
    2011-12-21 10
    2012-01-19 20  
    2012-01-30 15
    2012-02-10 35给定年月 2012-01 查询结果为
    日期 数量
    2012年01月 30给定年月 2012-02 查询结果为
    日期 数量
    2012年01月 45
    */
    go
    if OBJECT_ID('tbl')is not null
    drop table tbl
    go
    create table tbl(
    日期 datetime,
    数量 int
    )
    go
    insert tbl
    select '2011-12-21',10 union all
    select '2012-01-19',20 union all
    select '2012-01-30',15 union all
    select '2012-02-10',35go
    if OBJECT_ID('p_sp')is not null
    drop proc p_sp
    go
    create proc p_sp @date varchar(10)
    as
    declare @enddate datetime
    declare @startdate datetime
    select @enddate=CONVERT(datetime,@date+'-20',120)
    select @startdate=dateadd(dd,1,dateadd(MM,-1,@enddate))
    select a.日期,SUM(a.数量) as 数量
    from(
    select 日期=@date,SUM(数量) as 数量 from tbl
    where 日期 between @startdate and @enddate
    group by 日期)a
    group by a.日期exec p_sp '2012-01'
    /*
    日期 数量
    2012-01 30
    */
    exec p_sp '2012-02'
    /*
    日期 数量
    2012-02 50
    */--一个比较笨的方法
      

  4.   


    create table #t
    (dt date,num int)
    insert into #t
    select '2011-12-21', 10 union all
    select '2012-01-19', 20 union all  
    select '2012-01-30', 15 union all
    select '2012-02-10', 35 DECLARE @t AS DATE='2012-01-01'
    SELECT CONVERT(CHAR(6),@t,112) AS dt,SUM(t.num) FROM 
    (SELECT * FROM #t 
    WHERE dt<=CAST(CONVERT(VARCHAR(6),@t,112)+'20' AS DATE) 
    AND dt>=CAST(DATEADD(month,-1,CONVERT(VARCHAR(6),@t,112)+'21') AS DATE))AS t
    DROP TABLE #t