当前位置: 首页 > 图文教程 > 数据库 > MSSQL > SQL Server 某些条件下求某日的日期

MSSQL
在SQL Server中建立定时任务,处理时间超过一天的记录
推荐:监控数据库性能的SQL语句汇总
SQL Server常用到的几个设置选项
SQL server 2000存储过程
sql server行转列问题终极解决
专家在线:SQL Server块日志恢复
通过内存配置来优化SQL Server的性能
为SQL Server构造灵活可靠的安全门
剖析SQL Server数据库扩展存储过程
专家在线:SQL Server的数据清理技术
SQL Server 2005中的所有权链
利用SQL Server数据库快照形成报表
SQL技巧:探索用户自定义数据类型
保护SQL服务器的安全-用户识别问题
一些SQL Server的应用实例
SQLSERVER中,数据库同步的实现
深入理解SQL Server 中的错误处理
三种SQL分页法效率分析
sql server 2005中的except和INTERSECT运算
SQL 视图效率和连接超时设置

MSSQL 中的 SQL Server 某些条件下求某日的日期


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 57 ::
收藏到网摘: n/a

 

/*需要得结果: 某一天的日期
已知条件: 这天的年,月,星期几,在这个月中处于第几周

举例说明:  希望求出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)