给定参数年月,如何查询上月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
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
cast(year(riqi)as varchar)+'年'+cast(month(col) as varchar)+'月'
上课去了
。。
/*
给定参数年月,
如何查询上月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
*/--一个比较笨的方法
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