SQL-剔除周六⽇,节假⽇,⾮⼯作时间
需求是:求每个请求ID操作时间和验收时间之间的间隔,需要剔除周六⽇,节假⽇,⾮⼯作时间(我们的⼯作时间 09:00-17:30 午休时间12:00-13:00 午休时间不属于⼯作范围,需要剔除)
当看到这个需求的时候,就感觉让实现⾊彩斑斓的⿊⼀样,整个⼈是没有思绪的
但是最后发现还是可以完成的
⽐如现有的数据:
这个表的字段意思:请求ID,操作时间,验收时间
实现这个功能需要两个表辅助:
第⼀个表:TB_IP_Times(该表就是存放每⼀天的⽇期)2020法定节假日时间表
第⼆个表:TB_IP_OAHrmPubHoliday(国家法定节假⽇表)chagetype=1 的⽇期就是补班
changetype=2 的⽇期是正常假⽇
startDay:这段时间的开始时间(这⾥截取的是操作时间年⽉⽇作为开始时间)
endDay:这段时间的结束时间(这⾥截取的是验收时间年⽉⽇作为结束时间)
NowDay:就是这段时间的每⼀天,包括开始时间和结束时间
NowStartDay:就是NowDay拼接了每天的⼯作开始时间
NowEndDay:就是NowDay拼接了每天⼯作的结束时间
第⼆步:
这⼀步是为了判断这⼀天是否是开始时间,是否是结束时间,是否是周六⽇如果⾮开始时间,⾮结束时间,那么我们的⼯作⽇期是7.5h
如果是开始时间,结束时间就需要更复杂的判断
isStartDay:1为是开始时间,0为不是
isEndDay:1为是结束时间,0为不是
isWeek:1为是周末,0为不是
在节假⽇表中筛选补班的时间,因为如果周六⽇是补班的话,则周六⽇不剔除
第四步:
⽤第⼆步的视图,根据NowDay这个字段和补班的HolidayDate这个⽇期关联,如果可以关联上,则这⼀天的周六⽇是补班的,则修改
isWeek这个字段状态=0
发布评论