日期:2014-05-18  浏览次数:20467 次

SQLSERVER日期时间问题
现在有这么一个表,里有一个日期时间字段(2007-1-21   19:15:00)这样的格式,有日期,和时间。但现在有这样一个需求,就按日统计,按周统计,按月统计。

不知对日,对周,对月的时间计算是怎么样?

--------------------------------
举个例:

日期时间       数量
2007-1-1   19:31:25  56
2007-1-1   21:31:25  35
2007-1-1   35:31:25  43
2007-1-2   19:31:25  34
2007-1-3   35:31:25  35
2007-1-3   21:31:25  65

如何求到每天的数量平均值呢?

------解决方案--------------------
--每天平均值
select 日期时间,avg(数量) as 平均数量
group by convert(varchar(10),日期时间,120)
------解决方案--------------------
group by convert(varchar(10), '2007-1-21 19:15:00 ',120) --对日
group by convert(varchar(7), '2007-1-21 19:15:00 ',120) --对月

------解决方案--------------------
--每月平均值
select 日期时间,avg(数量) as 平均数量
group by month(日期时间)

------解决方案--------------------
对天,按convert(varchar(10),日期字段名,120)分组。
对月,按convert(varchar(7),日期字段名,120)分组。
对年,按convert(varchar(4),日期字段名,120)分组。

------解决方案--------------------
--每周平均值
select 日期时间,avg(数量) as 平均数量
group by datepart(week,日期时间)
------解决方案--------------------

select datepart(yy, '2007-1-21 19:15:00 ')--对年

select datepart(mm, '2007-1-21 19:15:00 ')--对月

select datepart(dd, '2007-1-21 19:15:00 ')--对天


------解决方案--------------------
create table T(日期时间 datetime, 数量 int)
insert T select '2007-1-1 19:31:25 ', 56
union all select '2007-1-1 21:31:25 ', 35
union all select '2007-1-1 15:31:25 ', 43
union all select '2007-1-2 19:31:25 ', 34
union all select '2007-1-3 15:31:25 ', 35
union all select '2007-1-3 21:31:25 ', 65

--按日统计
select 日期时间=convert(char(10), 日期时间, 120), 数量=sum(数量)
from T
group by convert(char(10), 日期时间, 120)

--按周统计
select 日期时间=datepart(week, 日期时间), 数量=sum(数量)
from T
where year(日期时间)=year(getdate())
group by datepart(week, 日期时间)

--按月统计
select 日期时间=convert(char(7), 日期时间, 120), 数量=sum(数量)
from T
group by convert(char(7), 日期时间, 120)