SqlServer函数获取指定日期后的第某个工作日
获取工作日
需要编写一个SqlServer函数,F_getWorkday,传入两个参数,第一个为时间date,第二个参数为第几个工作日num。调用F_getWorkday后返回date之后的第num个工作日。
现有节假日安排表如下:

drop function [dbo].[F_getWorkday];
create function [dbo].[F_getWorkday](
@staDate datetime,
@workDay int
)
returns datetime
as
begin
declare @curDay int ;
declare @tempDay datetime;
declare @weekday int;
declare @endDate datetime;
set @curDay=1;
select @tempDay = dateadd(day,1,@staDate);
while @curDay <=@workDay
begin
declare @tempDay2 datetime; --没有放假
if(select COUNT(1) from dategrid where set_type=1 and begin_date<=@tempDay and end_date>=@tempDay)<=0
begin--没加班
if(select COUNT(1) from dategrid where set_type=2 and begin_date<=@tempDay and end_date>=@tempDay)<=0
begin
select @weekday = datepart(weekday, @tempDay);
if (@weekday=1)--星期天
begin
select @tempDay = dateadd(day,1,@tempDay);
end
else if(@weekday>=2 and @weekday<=6)--周一到周五
begin
set @endDate = @tempDay;
select @tempDay = dateadd(day,1,@tempDay);
set @curDay = @curDay + 1;
end
else--周六
begin
select @tempDay = dateadd(day,2,@tempDay);
end;
end
else--加班
begin
set @tempDay2 = null;
select @tempDay2 = end_date from dategrid where set_type=2 and begin_date<=@tempDay and end_date>=@tempDay;--@tempDay在加班中的最后一天
set @endDate = @tempDay2;
select @tempDay = dateadd(day,1,@tempDay2);
set @curDay = @curDay + 1;
end;
end
else--放假
begin
select @tempDay2 = end_date from dategrid where set_type=1 and begin_date<=@tempDay and end_date>=@tempDay;--@tempDay在放假中的最后一天
select @tempDay = dateadd(day,1,@tempDay2);
set @endDate =@tempDay;--最后一天在假期情况
set @curDay = @curDay + 1;--叠加器加一次
end;
end;
return @endDate;
end
SqlServer函数获取指定日期后的第某个工作日的更多相关文章
- ThinkPHP 获取指定日期后第N个工作日具体日期
思路: 1.获取到查询年份内所有工作日数据数组2.获取到查询开始日期在工作日的索引3.计算需查询日期索引4.获得查询日期 /*创建日期类型记录表格*/ CREATE TABLE `tb_workday ...
- ThinkPHP中如何获取指定日期后工作日的具体日期
思路: 1.获取到查询年份内所有工作日数据数组2.获取到查询开始日期在工作日的索引3.计算需查询日期索引4.获得查询日期 /*创建日期类型记录表格*/ CREATE TABLE `tb_workday ...
- mssql sqlserver 获取指定日期为本月第几个工作日
转自:http://www.maomao365.com/?p=6771 摘要: 下文讲述工作中,需要获取指定日期在当月的工作日 下文讲述常规的指定工作日所在月的天数分析,实现思路:1 生成一个国家法定 ...
- php获取指定日期所在星期的开始时间与结束时间
function getWeekRange($date){ $ret=array(); $timestamp=strtotime($date); $w=strftime('%u',$ ...
- php获取指定日期的前一天,前一月,前一年日期
## php获取指定日期的前一天,前一月,前一年日期 前一天的日期为: date("Y-m-d",strtotime("-1 days",strtotime ...
- 获取指定日期相关DATENAME和DATEPART数据
DATENAME和DATEPART有何区别,Insus.NET写成一个函数,可以方便查询与对比: 一个是返回一个字符串,另一个是返回一个整数. SET ANSI_NULLS ON GO SET QUO ...
- C#获取指定日期为一年中的第几周
/// <summary> /// 获取指定日期,在为一年中为第几周 /// </summary> /// <param name="dt">指 ...
- MSSQL 获取指定日期所在星期的第一天和最后一天日期 获取指定日期坐在月的第一天和最后一天
ufn_GetWeekFirstAndEndDay 获取指定日期所在星期的第一天和最后一天日期 ALTER FUNCTION [dbo].[ufn_GetWeekFirstAndEndDay]( ...
- PHP:获取指定日期所在月的开始日期与结束日期
/** * 获取指定日期所在月的开始日期与结束日期 * @param string $date * @param boolean 为true返回开始日期,否则返回结束日期 * @return arra ...
随机推荐
- vim插件minibuf配置
1.去下载网站下载minibufexpl.vim文件放入到~/vim/plugins中,有的系统路径是~/.vim/plugins; 下载网址如下 https://www.vim.org/script ...
- ios开发介绍
iOS开发概述 •什么是IOS •什么是IOS开发 •为什么要选择IOS开发 •学习IOS开发的准备 1.什么是iOS •iOS是一款由苹果公司开发的操作系统(OS是Operating Sys ...
- 在 Windows Server 上搭建 *** 服务端(转载加亲测)
转载自:https://diveng.io/build-shadowsocks-server-on-windows-server.html 下面的教程建议大家使用第一种方法安装,说是比较简单.我则使用 ...
- webstorm快捷键大全-webstorm常用快捷键
默认配置下的常用快捷键,提高代码编写效率,离不开快捷键的使用,Webstorm拥有丰富的代码快速编辑功能,你可以自由配置功能快捷键. Webstorm预置了其他编辑器的快捷键配置,可以点击 查找/代替 ...
- leetcode_238. Product of Array Except Self_思维
https://leetcode.com/problems/product-of-array-except-self/ 给一个vector<int> nums,输出一个vector< ...
- CREATE SEQUENCE - 创建一个新的序列发生器
SYNOPSIS CREATE [ TEMPORARY | TEMP ] SEQUENCE name [ INCREMENT [ BY ] increment ] [ MINVALUE minvalu ...
- cmanformat - 不是命令啦,是个演示文件
描述 DESCRIPTION cmanformat 是 man pages 格式的演示文件. 由于系统不同会有差异.在 XWindow 下会好些. __________________________ ...
- bind - 将一个名字和一个套接字绑定到一起
SYNOPSIS 概述 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, struct s ...
- VC:UI编程
VC++中给对话框设置背景图片的方法 -----------------------------------------------------方法一(铺满窗口)------------------- ...
- vue之loader处理静态资源
webpack 是利用loader 来处理各种资源的,wepback的配置基本上就是为各种资源文件,指定不同类型的loader. 1,处理css 最基本的css 处理loader 是css-loade ...