求 第20周的星期天和星期六日期的写法? select dateadd(wk,19,dateadd(dd,number,'2011-01-01')) from master..spt_values WHERE type='P' and ( DATEPART(WEEKDAY,dateadd(dd,number,'2011-01-01'))=1 or DATEPART(WEEKDAY,dateadd(dd,number,'2011-01-01'))=7)and number<=6 /*----------------------- 2011-05-14 00:00:00.000 2011-05-15 00:00:00.000(2 行受影响) */
Create Function xfn_GetDate(@YEAR INT,@WEEK INT,@DAY INT) RETURNS DATETIME AS BEGIN DECLARE @RST DATETIME SET @RST=CAST( (CAST(@YEAR AS VARCHAR(20))+'-01-01') AS DATETIME) WHILE @RST<CAST( (CAST(@YEAR AS VARCHAR(20))+'-12-31') AS DATETIME) BEGIN IF @WEEK=DATEPART(WW,@RST) AND @DAY=DATEPART(DW,@RST) RETURN @RST SET @RST=DATEADD(DD,1,@RST) END RETURN @RST END SELECT DBO.xfn_GetDate('2011',20,6) SELECT DBO.xfn_GetDate('2011',20,7)
http://topic.csdn.net/t/20050919/10/4278688.html
select dateadd(wk,19,dateadd(dd,number,'2011-01-01'))
from master..spt_values
WHERE type='P'
and
(
DATEPART(WEEKDAY,dateadd(dd,number,'2011-01-01'))=1
or
DATEPART(WEEKDAY,dateadd(dd,number,'2011-01-01'))=7)and number<=6
/*-----------------------
2011-05-14 00:00:00.000
2011-05-15 00:00:00.000(2 行受影响)
*/
Create Function xfn_GetDate(@YEAR INT,@WEEK INT,@DAY INT)
RETURNS DATETIME
AS
BEGIN
DECLARE @RST DATETIME
SET @RST=CAST( (CAST(@YEAR AS VARCHAR(20))+'-01-01') AS DATETIME)
WHILE @RST<CAST( (CAST(@YEAR AS VARCHAR(20))+'-12-31') AS DATETIME)
BEGIN
IF @WEEK=DATEPART(WW,@RST) AND @DAY=DATEPART(DW,@RST)
RETURN @RST
SET @RST=DATEADD(DD,1,@RST)
END
RETURN @RST
END
SELECT DBO.xfn_GetDate('2011',20,6)
SELECT DBO.xfn_GetDate('2011',20,7)