/**
* 预存给定日期段的所有日期,包括工作日、普通周末假日、法定节假日
* @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计算整年工作日(包含特殊的工作日)排除法定节假日和周末能运行
表可能包含以下字段:日期(DATE类型)、工作日标识(BOOLEAN,表示是否为工作日)、周末标识(BOOLEAN,表示是否为周末)、节假日标识(BOOLEAN,表示是否为法定节假日)等。 4. **Java数据库连接**: 使用JDBC...
同时,类中可能还有一个`isWorkday()`方法,用于排除周末,只考虑非法定节假日的工作日。 接着,工具类提供了一个计算工作日后日期的功能。这个功能可能封装在一个名为`getNthWorkingDay()`的方法中,它接受两个...
首先,我们看到代码中定义了两个数组,`jrdate_2017` 和 `jrdate_2018`,分别包含了2017年和2018年的法定节假日日期。另外还有两个数组 `txr_2017` 和 `txr_2018`,用于存储相应年份的调休日(如周末补班等)。这些...
Java 节假日算法是指在给定的日期范围内,计算包含假期的天数的算法。在这个算法中,我们可以看到三个类分别是 DateToDate、Vacation 和 WorkDate。下面我们将详细解释这个算法的实现过程。 首先,DateToDate 类中...
- 返回一个整数,表示两个日期之间(包括起始和结束日期)的单休工作日数量。 - **实现逻辑**: - 分别提取两个日期的年、月、日信息。 - 从起始日期开始,逐日遍历至结束日期。 - 判断当前日期是否为星期日,...
总之,获取下一个法定工作日期涉及对日期的操作、周末判断以及节假日处理。通过理解Java日期时间API,我们可以编写出灵活且可靠的代码来解决这个问题。在实际项目中,还可以考虑优化性能,如使用缓存策略来存储已...
这包括国家法定节假日、特定地区的公共假期以及公司自定义的非工作日。 3. **排除周末**:一般情况下,周末不被视为工作日。因此,我们需要检查开始日期和结束日期之间的每个日期,排除星期六和星期日。 4. **计算...
在给定的起始和结束日期之间,需要排除周末(通常是周六和周日)以及法定节假日。这需要一个节假日数据库,可以是静态的,也可以是动态获取的。静态数据库需要定期更新,而动态获取则可以通过集成在线接口实现,例如...
- 法定节假日需要额外的节日列表进行判断,这可以通过创建一个包含所有节假日的`Set<LocalDate>`实现。 3. **递归计算**: - 设定起始日期和结束日期,以及每隔多少个工作日进行一次计算。 - 使用递归函数,每次...
这种功能在企业管理、项目计划或者金融计算等领域非常实用,因为它能够帮助用户避开非工作日,如周末和法定节假日。 在计算工作日时,我们首先需要了解基础的日期和时间处理。在Java中,我们可以使用`java.util....
4. `date_type`: 日期类型,0表示工作日,1表示特殊工作日,2表示法定节假日 接下来,我们创建一个名为`work_days`的类,这个类将包含两个主要方法:`get_week`和`getDateFromRange`。 `get_week`方法用于获取给定...
企业级日期算法往往需要考虑更复杂的场景,例如在计算工作日时排除周末和法定节假日。在描述中提到的“企业级日期算法(不包括周末和节假日)”意味着算法应该能够识别并跳过这些非工作日。这通常涉及到创建一个包含...
这可能涉及到对国内外法定节假日、公共假期以及特殊节日的数据库或API接口的集成,以便进行实时查询。 2. **工作日计算**:除了节假日信息,还可能提供计算工作日的功能,即排除周末和节假日后得到的连续工作日数量...
在`searchWeekCheckin`方法中,遍历日期范围,根据日期与假期和工作日列表的对比,确定每一天的考勤类型(工作日、节假日),并创建包含日期、类型等信息的新记录添加到返回列表中。 在实际的小程序开发中,这样的...
- **计算方法**:按照员工在本单位的工作年限计算,不包括法定节假日和公休日。 #### 三、年休假请假条格式与内容 - **标题**:“年休假请假条”或“员工年休假请假条”等。 - **称呼**:通常为“敬爱的领导”或...
6. **节假日处理**:可能包含对节假日的判断,例如判断某个日期是否为周末或法定节假日。 7. **时区转换**:支持在不同时区之间转换日期。 8. **日期范围检查**:验证一个日期是否在给定的日期范围内。 9. **日期...
这是因为法定节假日通常是劳动者休息的时间,安排加班工作需要给予更高的补偿。 #### PowerPoint知识点:浏览视图的功能 **题目内容:** 在PowerPoint中,哪种视图下可以轻松地按顺序组织幻灯片,进行插入、删除、...