declare @date datetime set @date='2008-01-01' declare @t table(date datetime) while(datediff(dd,@date,'2008-12-31')>=0) begin insert into @t select @date set @date=dateadd(dd,1,@date) end select * from @t where datepart(dw,date)=5
SQL2000 ---------- declare @i int declare @d datetime set @i=1 set @d='2007-01-01' Create table #a (Dat datetime) while year(@d)=2007 begin insert into #a values (@d ) set @i=@i+1 set @d=dateadd(day,1,@d) end select *,datepart(dw,Dat) as a from #a where datepart(dw,Dat) =5 drop table #a
DECLARE @Date datetime DECLARE @StartDate datetime DECLARE @EndDate datetime DECLARE @WeekDay int DECLARE @i intSET DATEFIRST 7 --设置每周的第一天 SET @StartDate='2008-01-01' --统计的开始日期 SET @EndDate='2008-12-31' --统计的结束日期 SET @WeekDay=5 --根据实际的@@DATEFIRST而定,一般默认是7,如 @StartDate='2008-01-01'时候, @WeekDay=5表示星期四 SET @i=DATEPART(weekday,@StartDate) IF(@i<=@WeekDay AND @i<7) SET @i=@WeekDay-@i ELSE IF(@i<=@WeekDay AND @i=7) SET @i=@i-@WeekDay ELSE SET @i=@@DATEFIRST-@i+@WeekDaySET @Date=DATEADD(day,@i,@StartDate) WHILE @Date<=@EndDate BEGIN IF(@StartDate<=@Date) PRINT CONVERT(nvarchar(10),@Date,121) SET @Date=DATEADD(Week,1,@Date) END GO/* 2008-01-03 2008-01-10 2008-01-17 2008-01-24 2008-01-31 2008-02-07 2008-02-14 2008-02-21 2008-02-28 2008-03-06 2008-03-13 2008-03-20 2008-03-27 2008-04-03 2008-04-10 2008-04-17 2008-04-24 2008-05-01 2008-05-08 2008-05-15 2008-05-22 2008-05-29 2008-06-05 2008-06-12 2008-06-19 2008-06-26 2008-07-03 2008-07-10 2008-07-17 2008-07-24 2008-07-31 2008-08-07 2008-08-14 2008-08-21 2008-08-28 2008-09-04 2008-09-11 2008-09-18 2008-09-25 2008-10-02 2008-10-09 2008-10-16 2008-10-23 2008-10-30 2008-11-06 2008-11-13 2008-11-20 2008-11-27 2008-12-04 2008-12-11 2008-12-18 2008-12-25 */
--星期天:declare @date datetime set @date='2008-01-01' declare @t table(date datetime) while(datediff(dd,@date,'2008-12-31')>=0) begin insert into @t select @date set @date=dateadd(dd,1,@date) end select * from @t where datepart(dw,date)=1
declare @date datetime
set @date='2008-01-01'
declare @t table(date datetime)
while(datediff(dd,@date,'2008-12-31')>=0)
begin
insert into @t select @date
set @date=dateadd(dd,1,@date)
end
select * from @t where datepart(dw,date)=5
----------
declare @i int
declare @d datetime
set @i=1
set @d='2007-01-01'
Create table #a (Dat datetime)
while year(@d)=2007
begin
insert into #a values (@d )
set @i=@i+1
set @d=dateadd(day,1,@d)
end
select *,datepart(dw,Dat) as a from #a where datepart(dw,Dat) =5 drop table #a
DECLARE @StartDate datetime
DECLARE @EndDate datetime
DECLARE @WeekDay int
DECLARE @i intSET DATEFIRST 7 --设置每周的第一天
SET @StartDate='2008-01-01' --统计的开始日期
SET @EndDate='2008-12-31' --统计的结束日期
SET @WeekDay=5 --根据实际的@@DATEFIRST而定,一般默认是7,如 @StartDate='2008-01-01'时候, @WeekDay=5表示星期四
SET @i=DATEPART(weekday,@StartDate)
IF(@i<=@WeekDay AND @i<7)
SET @i=@WeekDay-@i
ELSE IF(@i<=@WeekDay AND @i=7)
SET @i=@i-@WeekDay
ELSE
SET @i=@@DATEFIRST-@i+@WeekDaySET @Date=DATEADD(day,@i,@StartDate)
WHILE @Date<=@EndDate
BEGIN
IF(@StartDate<=@Date) PRINT CONVERT(nvarchar(10),@Date,121)
SET @Date=DATEADD(Week,1,@Date)
END
GO/*
2008-01-03
2008-01-10
2008-01-17
2008-01-24
2008-01-31
2008-02-07
2008-02-14
2008-02-21
2008-02-28
2008-03-06
2008-03-13
2008-03-20
2008-03-27
2008-04-03
2008-04-10
2008-04-17
2008-04-24
2008-05-01
2008-05-08
2008-05-15
2008-05-22
2008-05-29
2008-06-05
2008-06-12
2008-06-19
2008-06-26
2008-07-03
2008-07-10
2008-07-17
2008-07-24
2008-07-31
2008-08-07
2008-08-14
2008-08-21
2008-08-28
2008-09-04
2008-09-11
2008-09-18
2008-09-25
2008-10-02
2008-10-09
2008-10-16
2008-10-23
2008-10-30
2008-11-06
2008-11-13
2008-11-20
2008-11-27
2008-12-04
2008-12-11
2008-12-18
2008-12-25
*/
--星期天:declare @date datetime
set @date='2008-01-01'
declare @t table(date datetime)
while(datediff(dd,@date,'2008-12-31')>=0)
begin
insert into @t select @date
set @date=dateadd(dd,1,@date)
end
select * from @t where datepart(dw,date)=1