SQL表中获取时间段里每一天的数据,如果表里没有这一天的记录数据就为零
表 A
id value date
1 aa 2007-01-02
2 bb 2007-01-01
3 cc 2007-01-04
现要得到在2007-01-02 到 2007-01-05的如下记录
value date
aa 2007-01-02
0 2007-01-03
cc 2007-01-04
o 2007-01-05
SQL查询语句能够完成吗,高手指点下,感激不尽~
------解决方案--------------------select * from 表 where convert(varchar(8),date,112) between '20070102 'and ' '20070105 '
------解决方案--------------------select * from 表 where convert(varchar(10),date,120) between '2007-01-02 'and ' '2007-01-05 '
或加小时段
select * from 表 where date between '2007-01-02 00:00:00 'and ' '2007-01-05 23:59:59 '
------解决方案-------------------- create table T(id int, value varchar(10), [date] datetime)
insert T select 1, 'aa ', '2007-01-02 '
union all select 2, 'bb ', '2007-01-01 '
union all select 3, 'cc ', '2007-01-04 '
select isnull(B.value, '0 ') as value, A.* from
(
select [Date]= '2007-01-02 '
union all select '2007-01-03 '
union all select '2007-01-04 '
union all select '2007-01-05 '
) as A
left join T as B on A.[Date]=B.[Date]
--result
value Date
---------- ----------
aa 2007-01-02
0 2007-01-03
cc 2007-01-04
0 2007-01-05
(4 row(s) affected)
------解决方案--------------------@ta 为表变量生成一个月的日期表,与下面的语句一起用,就不用生成临时表
------解决方案--------------------可以在表变量定义就行了
set @i= '2007-01-01 00:00:00 '--开始时间
while @i!> '2007-1-31 00:00:00 '--结束时间用getdate()系统时间