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

MSSQL
SQL2005学习笔记 APPLY 运算符
SQL2005学习笔记 EXCEPT和INTERSECT运算符
SQL2005 学习笔记 窗口函数(OVER)
SQL2005 ROW_NUMER实现分页的两种常用方式
SQL Server中的XML数据进行insert、update、delete
在安装sql2005中或安装后sa用户无法登陆系统解决方法
SQL2005 自动备份的脚本
在SQLServer 2005中编写存储过程
SQL2005 服务器因重装改名后出错的说明
使用c#构造date数据类型
SQLServer2005 批量查询自定义对象脚本
SQLServer2005 Output子句获取刚插入的ID值
SQLServer 设置单词首字母大写
SQLServer ntile获取每组前10%的数据
安装SQL2005提示 找不到任何SQL2005组件的问题解决方案
sql2005开发版 没有任何功能可以安装
超详细的sql2005图解安装全过程
sqlserver2005 安装图解教程
winXP系统安装SQLServer2005开发版具体过程与注意问题
SQLServer 2005系统配置要求官方说明

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 114 ::
收藏到网摘: 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)