server|条件
/*需要得结果: 某一天的日期
已知条件: 这天的年,月,星期几,在这个月中处于第几周
举例说明: 希望求出2004-11-22
已知条件: 2004年, 11 月, 星期一 ,这天在11月是第四周
declare year numeric(4),month numeric(2),weekday varchar(6),week numeric(1)
set year=2004
set month=11
set weekday='星期一'
set week=4
*/
alter function RequestDate
(year numeric(4),month numeric(2),weekday varchar(6),week numeric(1))
returns datetime as
begin
declare date1 varchar(10) --得到该月的第一天的日期
declare month1 varchar(2)
if month<10
set month1='0'+ltrim(rtrim(str(month)))
else
set month1=ltrim(rtrim(str(month)))
set date1=ltrim(rtrim(str(year))) + '-' + month1+ '-' + '01'
declare num1 numeric(3)
declare num2 numeric(3)
declare num3 numeric(3)
set num1=datepart(ww,date1) --得到该月的第一天在该年的周数
set num1=num1+week-2 --得到该月的要求得的那天所在的周数与该年的第一周第一天的周数差
set num2=datepart(dw,dateadd(ww,num1,'2004-01-01')) --得到日期对应的星期代号
select num3=case weekday
when '星期日' then 1
when '星期一' then 2
when '星期二' then 3
when '星期三' then 4
when '星期四' then 5
when '星期五' then 6
when '星期六' then 7
end
return dateadd(dd,num3-datepart(dw,dateadd(ww,num1,'2004-01-01')),dateadd(ww,num1,'2004-01-01'))
end
-- select dbo.RequestDate(2004,11,'星期一',4)