/**
* 预存给定日期段的所有日期,包括工作日、普通周末假日、法定节假日
* @beginDt 起日期
* @endDt 止日期
*/
CREATE PROC generateDateList
(
@beginDt datetime
,@endDt datetime
)
AS
BEGIN
--========变量声明========--
DECLARE
--位于起止时间之间的时间变量
@dtDuring datetime
,@dayOfWeekNum int
,@sql nvarchar(4000)
,@batchCount int
,@holidayDateVal datetime
,@holidayDateDesc nvarchar(100)
--=========初始化=========--
SET @dtDuring = @beginDt
SET @batchCount = 0
SET @sql = 'DELETE FROM date_list '
--=========根据当前是否为工作日插入不同数据=========--
WHILE @dtDuring <= @endDt
BEGIN
--清空旧数据
SET @holidayDateVal = NULL
SELECT @holidayDateVal = date_value,@holidayDateDesc = date_desc
FROM holiday_list WHERE date_value = @dtDuring
--计算法定节假日数据
IF @holidayDateVal IS NOT NULL
BEGIN
SET @sql = @sql + 'insert date_list(date_value,is_holiday,date_desc) values(''' + CAST(@dtDuring AS varchar) + ''',''1'',''' + @holidayDateDesc + ''') '
END
--计算非法定节假日(包括平常日期和普通周末假日)
ELSE
BEGIN
--一周内的星期几(从星期日算起,星期一时返回2)
SET @dayOfWeekNum = datePart(dw,@dtDuring);
--如果是工作日,则字段is_holiday为0
IF 1 < @dayOfWeekNum AND @dayOfWeekNum < 7
BEGIN
SET @sql = @sql + 'insert date_list(date_value,is_holiday,date_desc) values(''' + CAST(@dtDuring AS varchar) + ''',''0'',''工作日'') '
END
--如果是节假日,则根据节假日的类型(非法定)插入相应数据
ELSE
BEGIN
SET @sql = @sql + 'insert date_list(date_value,is_holiday,date_desc) values(''' + CAST(@dtDuring AS varchar) + ''',''1'',''普通周末假日'') '
END
END
--设置批量更新的数目(以防止因@sql长度不够而出错)
SET @batchCount = @batchCount + 1
--更新数据(即插入)
IF @batchCount % 30 = 0
BEGIN
EXECUTE sp_executesql @sql
--清空@sql变量
SET @sql = ''
END
--日期加1
SET @dtDuring = dateAdd(day,1,@dtDuring);
END
--最后更新剩余的sql语句
EXECUTE sp_executesql @sql
END
GO
/**
* 计算给定时间段内的剩余工作日数
* @beginDt 起日期
* @endDt 止日期(不纳入“已逝日期”内,即该日期当作是“未来日”)
* @workDateCountGiven 给定工作日数
*/
CREATE FUNCTION getLeaveWorkDateCount
(
@beginDt datetime
,@endDt datetime
,@workDateCountGiven int
)
RETURNS int
AS
BEGIN
DECLARE
@elapsedDateCount int
,@holidayCount int
,@elapsedWorkDateCount int
SET @holidayCount = 0
SET @elapsedDateCount = datediff(day,@beginDt,@endDt)
--计算该日期段内的节假日(包括法定与非法定)数,不含止日期(打多是当天)
SELECT @holidayCount = count(*)
FROM date_list
WHERE @beginDt <= date_value AND date_value < @endDt AND is_holiday = '1'
--已逝工作日数=已逝天数-该段日期内的节假日数
SET @elapsedWorkDateCount = @elapsedDateCount - @holidayCount
IF @elapsedWorkDateCount < 0
SET @elapsedWorkDateCount = 0
--剩余工作日数= 给定工作日数-已逝工作日数
RETURN @workDateCountGiven - @elapsedWorkDateCount
END
GO
- 大小: 15.4 KB
- 大小: 28.5 KB
分享到:
相关推荐
* 01-给定日期,判断是否是休息日(包含法定节假日和不需要补班的周末)。 * 02-给定日期,判断是否是工作日(非休息日)。 * 03-获取一年中总共的天数。 * 04-获取一年中法定节假日的天数。 * 05-获取一年中需要...
java计算整年工作日(包含特殊的工作日)排除法定节假日和周末能运行
不需要编程,纯使用函数...1. 解决法定节假日 2. 解决调休等特殊日子 3. 需要每年维护一次“特殊日期”清单,记录每年的特殊节日,也可以自己加特殊日期,比如公司内部统一放假或加班,注意第二列,放假写1,加班写-1。
本程序实现了计算给定一段时间内有多少工作日,也可以输出所有工作日的日期,节假日判断。
计算两个日期间的工作日天数,扣除六日,去掉制定的法定假日,指定的假日,增加倒休和加班日期的天数
网上排除节假日、周六周日 获取相差时间 分为四种情况, 精确到天 此工具类在此基础之上进行优化, 分为俩种情况, 精确到分钟,保留俩位小数 (精确到秒 需自己加工下) 入口方法: getWorkHours
现在将问题简化,不考虑元旦、国庆、春节等节假日放假,仅仅考虑每周工作日为周一至周五,周六周日休息的情形。给定某个日期和此日期后所需等待的工作日个数,编写程序,输出最快在哪天可以得到答复。例如,办事当天...
Java实现给定日期计算星期几。通过给定****-**-**的格式来计算星期几。
返回给定日期当月的第一天和最后一天的日期
S7-SCL - 可用于从给定日期或者 CPU 硬件时钟的当前日期确定日历日和日历周的工具
C语言程序设计-计算并输出给定整数的所有因子之积(包括自身);规定这个整数的值不大于50;
精确计算日期物理差(计算给定的两个日期间的物理年月日时分秒差),参照日期使用DateTime的AddYears,AddMonths,AddDays,AddHours,AddMinutes,AddSeconds可精确回到计算日期
1、当给定的天数days大于或等于365(或366)时,计算目标年份 2、当给定的天数days小于365(或366)时,计算目标年份中的月份 3、当剩余天数不足一月时,计算目标年、月份中的天数 输入:起始日期:y-m-d 与给定...
#自动查询节日 给定起始日期和结束日期,自动获取总共的节假日天数 import datetime from dateutil import rrule,easter try: set except NameError: from sets import Set as set #复活节 def all_easter(start,...
一、给定一个日期值,求出此日期所在星期的星期一和星期天的日期数据 例如给定一个日期 2010-09-01,求出它所在星期的星期一是2010-08-30,星期天是2010-09-05 Function创建如下: 代码如下: USE [MSSQL] GO SET ANSI...
给定时间段和开关比,类似脉宽调制功能,比如给定10秒,开关比是0.45,则开是4.5秒、关是5.5秒循环执行!和中断时间Sleep(Ts)的Ts有关!
本文实例讲述了python判断给定的字符串是否是有效日期的方法。分享给大家供大家参考。具体分析如下: 这里python判断给定的字符串是否是一个有效的日期,如果是一个日期格式的字符串,该函数返回True,否则返回False...
c++面向对象实现计算给出的一个日期的下一天
写一个程序,输入-一个日期(年、月、日), 年份在1900-2050之间,做下列计算: (1) 计算明天的日期(年、月、日),输 出结果; (2) 输入一个天数(n) ,计算n天后的日 期; (3) 计算上述各个日期是星期几,并输出 (4)理解...
主要介绍了Python自定义函数计算给定日期是该年第几天的方法,结合具体实例形式分析了Python日期时间计算相关操作技巧,需要的朋友可以参考下