日期:2014-05-17  浏览次数:20456 次

SQL如何算出2013年所有的周六和周日?
SQL语句  如何算出2013年所有的周六和周日? 
sql??周末

------解决方案--------------------
USE test
GO

DECLARE @DateFirst TINYINT
SELECT @DateFirst=@@DATEFIRST

SET DATEFIRST 1

SELECT 
Date
,DATENAME(weekday,Date) AS Weekday
FROM (
SELECT
DATEADD(dd,number,'20130101') AS Date
FROM master.dbo.spt_values
WHERE DATEADD(dd,number,'20130101') BETWEEN '20130101' AND '20131231'
AND type='P'
) AS t
WHERE DATEPART(weekday,Date) IN(6,7)

SET DATEFIRST @DateFirst


/*
Date                    Weekday
----------------------- --------
2013-01-05 00:00:00.000 星期六
2013-01-06 00:00:00.000 星期日
2013-01-12 00:00:00.000 星期六
2013-01-13 00:00:00.000 星期日
2013-01-19 00:00:00.000 星期六
2013-01-20 00:00:00.000 星期日
2013-01-26 00:00:00.000 星期六
2013-01-27 00:00:00.000 星期日
...
2013-12-21 00:00:00.000 星期六
2013-12-22 00:00:00.000 星期日
2013-12-28 00:00:00.000 星期六
2013-12-29 00:00:00.000 星期日


*/

------解决方案--------------------
declare @sdt date
set @sdt = '2013-01-01'

declare @edt date
set @edt = DATEADD(year,1,@sdt )
declare @dt date
declare @w int
select @w = datepart(WEEKDAY ,@sdt)
if @w = 1
begin
print convert(varchar(10),@sdt,120) + ' 周日'
end
set @w = 7 - @w 
set @dt = DATEADD(day,@w,@sdt)

while @dt < @edt
begin
print convert(varchar(10),@dt,120) + '  周六'
print convert(varchar(10),dateadd(day,1,@dt),120) + '  周日'
set @dt = DATEADD(day,7,@dt)
end


------解决方案--------------------
create table SatSun([id] int identity(1,1),[date] datetime,[weekday] char(6))

go

declare @datetime datetime,@weekday char(6)

set @datetime='2013-1-1'

while @datetime<='2013-12-31'

begin

select @weekday=datename(weekday,@datetime)

if @weekday= '星期六' insert SatSun([date],[weekday]) values(@datetime,@weekday)

if @weekday='星期日' insert SatSun([date],[weekday]) values(@datetime,'星期天')

select @datetime=dateadd(day,1,@datetime)

end

go

select * from satsun

drop table satsun