`
joerong666
  • 浏览: 418332 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

预存给定日期段的所有日期,包括工作日、普通周末假日、法定节假日

阅读更多

/**
* 预存给定日期段的所有日期,包括工作日、普通周末假日、法定节假日
* @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
分享到:
评论

相关推荐

    java获取当年的法定节假日和工作日等信息

    * 01-给定日期,判断是否是休息日(包含法定节假日和不需要补班的周末)。 * 02-给定日期,判断是否是工作日(非休息日)。 * 03-获取一年中总共的天数。 * 04-获取一年中法定节假日的天数。 * 05-获取一年中需要...

    java计算整年工作日(包含特殊的工作日)排除法定节假日和周末能运行

    java计算整年工作日(包含特殊的工作日)排除法定节假日和周末能运行

    Java 实现将每年的节假日,周末,工作日详情记录至数据库表中

    表可能包含以下字段:日期(DATE类型)、工作日标识(BOOLEAN,表示是否为工作日)、周末标识(BOOLEAN,表示是否为周末)、节假日标识(BOOLEAN,表示是否为法定节假日)等。 4. **Java数据库连接**: 使用JDBC...

    判断是否是节假日以及几个工作日后的日期(包含json格式依赖jar包)

    同时,类中可能还有一个`isWorkday()`方法,用于排除周末,只考虑非法定节假日的工作日。 接着,工具类提供了一个计算工作日后日期的功能。这个功能可能封装在一个名为`getNthWorkingDay()`的方法中,它接受两个...

    js判断节假日实例代码

    首先,我们看到代码中定义了两个数组,`jrdate_2017` 和 `jrdate_2018`,分别包含了2017年和2018年的法定节假日日期。另外还有两个数组 `txr_2017` 和 `txr_2018`,用于存储相应年份的调休日(如周末补班等)。这些...

    Java节假日算法(免费)

    Java 节假日算法是指在给定的日期范围内,计算包含假期的天数的算法。在这个算法中,我们可以看到三个类分别是 DateToDate、Vacation 和 WorkDate。下面我们将详细解释这个算法的实现过程。 首先,DateToDate 类中...

    VBA 实现26天制工作日计算源代码

    - 返回一个整数,表示两个日期之间(包括起始和结束日期)的单休工作日数量。 - **实现逻辑**: - 分别提取两个日期的年、月、日信息。 - 从起始日期开始,逐日遍历至结束日期。 - 判断当前日期是否为星期日,...

    java得到下一个法定工作日期

    总之,获取下一个法定工作日期涉及对日期的操作、周末判断以及节假日处理。通过理解Java日期时间API,我们可以编写出灵活且可靠的代码来解决这个问题。在实际项目中,还可以考虑优化性能,如使用缓存策略来存储已...

    根据开始日期和工作日天数计算结束日期

    这包括国家法定节假日、特定地区的公共假期以及公司自定义的非工作日。 3. **排除周末**:一般情况下,周末不被视为工作日。因此,我们需要检查开始日期和结束日期之间的每个日期,排除星期六和星期日。 4. **计算...

    计算某时间段内的工作日及时间

    在给定的起始和结束日期之间,需要排除周末(通常是周六和周日)以及法定节假日。这需要一个节假日数据库,可以是静态的,也可以是动态获取的。静态数据库需要定期更新,而动态获取则可以通过集成在线接口实现,例如...

    Java计算工作日

    - 法定节假日需要额外的节日列表进行判断,这可以通过创建一个包含所有节假日的`Set&lt;LocalDate&gt;`实现。 3. **递归计算**: - 设定起始日期和结束日期,以及每隔多少个工作日进行一次计算。 - 使用递归函数,每次...

    workdaycalculate.zip

    这种功能在企业管理、项目计划或者金融计算等领域非常实用,因为它能够帮助用户避开非工作日,如周末和法定节假日。 在计算工作日时,我们首先需要了解基础的日期和时间处理。在Java中,我们可以使用`java.util....

    ThinkPHP中获取指定日期后工作日的具体日期方法

    4. `date_type`: 日期类型,0表示工作日,1表示特殊工作日,2表示法定节假日 接下来,我们创建一个名为`work_days`的类,这个类将包含两个主要方法:`get_week`和`getDateFromRange`。 `get_week`方法用于获取给定...

    我的日期算法自己写的!呵呵!

    企业级日期算法往往需要考虑更复杂的场景,例如在计算工作日时排除周末和法定节假日。在描述中提到的“企业级日期算法(不包括周末和节假日)”意味着算法应该能够识别并跳过这些非工作日。这通常涉及到创建一个包含...

    HolidayDemo.zip

    这可能涉及到对国内外法定节假日、公共假期以及特殊节日的数据库或API接口的集成,以便进行实时查询。 2. **工作日计算**:除了节假日信息,还可能提供计算工作日的功能,即排除周末和节假日后得到的连续工作日数量...

    4-29 实现考勤成功页面(业务层) - EMOS小程序1

    在`searchWeekCheckin`方法中,遍历日期范围,根据日期与假期和工作日列表的对比,确定每一天的考勤类型(工作日、节假日),并创建包含日期、类型等信息的新记录添加到返回列表中。 在实际的小程序开发中,这样的...

    年休假请假条.docx

    - **计算方法**:按照员工在本单位的工作年限计算,不包括法定节假日和公休日。 #### 三、年休假请假条格式与内容 - **标题**:“年休假请假条”或“员工年休假请假条”等。 - **称呼**:通常为“敬爱的领导”或...

    simple_utils

    6. **节假日处理**:可能包含对节假日的判断,例如判断某个日期是否为周末或法定节假日。 7. **时区转换**:支持在不同时区之间转换日期。 8. **日期范围检查**:验证一个日期是否在给定的日期范围内。 9. **日期...

    昆山市张浦镇财务专技人员2019年招聘模拟试题及答案解析.docx

    这是因为法定节假日通常是劳动者休息的时间,安排加班工作需要给予更高的补偿。 #### PowerPoint知识点:浏览视图的功能 **题目内容:** 在PowerPoint中,哪种视图下可以轻松地按顺序组织幻灯片,进行插入、删除、...

Global site tag (gtag.js) - Google Analytics