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 ...
随机推荐
- IntelliJ IDEA导入JDK出现The selected directory is not a valid home for JDK问题的解决方法
JDK版本与IDEA版本不兼容: JDK版本过高可能会造成这个问题,需与IDEA相兼容的JDK才行. 比如,用IDEA2016.3.8版本的,JDK用jdk-10.0.1_windows-x64_bi ...
- java内存查看与分析
业界有很多强大的java profile的工具,比如Jporfiler,yourkit,这些收费的东西我就不想说了,想说的是,其实java自己就提供了很多内存监控的小工具,下面列举的工具只是一小部分, ...
- Divide and Conquer_1.最大连续子数组
给定一个数组,求它的一个子数组,使其求和最大. 这个问题的应用:给定一只股票很多天的价格,计算从哪天买进哪天卖出能获得最大利润. 给定 prices:100 113 98 87 65 ...
- react.js工程结构
1.index.html :UI界面入口.挂在点: 2.manifest.json:应用说明 3.package.json:工程说明.依赖说明等 4.source : 代码源文件
- Kotlin – CharSequence IsNullOrBlank() vs IsNullOrEmpty()
本文摘自:http://blog.farifam.com/2018/01/28/kotlin-charsequence-isnullorblank-vs-isnullorempty/ Koltin p ...
- find_in_set()和in()比较
转载于:https://www.cnblogs.com/zqifa/p/mysql-4.html 作者:zqifa 因为自己太懒了,就从大佬那转载来,作为一次笔记! mysql 中find_in_se ...
- oracle调用存储过程和函数返回结果集
在程序开发中,常用到返回结果集的存储过程,这个在mysql和sql server 里比较好处理,直接返回查询结果就可以了,但在oracle里面 要 out 出去,就多了一个步骤,对于不熟悉的兄弟们还得 ...
- MyBatis 实现分页功能
MySQL 的分页功能是基于内存的分页(即查出来所有记录,再按起始位置和页面容量取出结果). 案例:①根据用户名(支持模糊查询).用户角色 id 查询用户列表(即根据用户名称或根据用户角色 id 又或 ...
- Volume 1. Sorting/Searching(uva)
340 - Master-Mind Hints /*读了老半天才把题读懂,读懂了题输出格式没注意,结果re了两次. 题意:先给一串数字S,然后每次给出对应相同数目的的一串数字Si,然后优先统计Si和S ...
- python 深浅拷贝&集合
一.深浅拷贝 1.浅拷贝,只会拷贝第一层 s = [1, 'ss', '小可爱'] s1 = s.copy() print(s1) >>> [1, 'ss', '小可爱'] s = ...