SQL Server 去除节假日天数,获取实际工作日天数
自定义节假日日历,去除节假日天数,获取实际工作日天数,最小0.5天。
BaseRestDay 表 为休息日记录表,需要自己创建,如下:
表名 | 表说明 | 字段名 | 字段说明 | 标识 | 主键 | 类型 | 允许空 | 默认值 |
BaseRestDay | 节假日 | BaseDayID | 自增 | √ | √ | int | 否 | |
BaseRestDay | 节假日 | BaseYear | 年份 | int | 否 | ((0)) | ||
BaseRestDay | 节假日 | BaseDay | 日期 | datetime | 否 | |||
BaseRestDay | 节假日 | BaseWeekName | 日期名称 | nvarchar(50) | 否 | ('') |
下面是标量值函数,上面表创建好,标量值函数直接执行就能用了,按自己需求自行调整:
CREATE Function [dbo].[F_GetWorkdayCount](@ArgStart datetime,@ArgEnd datetime,@IsWork int)-- 传1只计算工作日,传0 工作日+休息日一起计算RETURNS decimal(18,1)
AS
BEGINif Convert(varchar(30),@ArgStart,101 )=Convert(varchar(30),@ArgEnd,101 ) and datediff(MINUTE,@ArgStart,@ArgEnd) =0return 0Declare @Days decimal(18,1)Declare @Start datetimeDeclare @End datetimeset @Days = 0--计算规则 开始时间小于结束时间;12点前算1天,12点后算半天if(@ArgStart > @ArgEnd) select @Start=@ArgEnd,@End=@ArgStartelseselect @Start=@ArgStart,@End=@ArgEnd--step1 计算开始时间 结束时间相差天数declare @AllDays decimal(18,1)SELECT @AllDays = DATEDIFF(day,@Start,@End)if(datename(hh,@Start) < 12) select @AllDays = (@AllDays+0.5) if(datename(hh,@End) >= 12) select @AllDays = (@AllDays+0.5) --step2 判断是否计算休息日,计算开始时间结束时间休息日天数declare @RestDays decimal(18,1)set @RestDays = 0if(@IsWork = 1)Begin set @Start = Convert(datetime, Convert(varchar(8), @Start, 112), 112)set @End = Convert(datetime, Convert(varchar(8), @End, 112), 112)--BaseRestDay 表为休息日记录表SELECT @RestDays = Count(*) FROM BaseRestDay CWHERE C.BaseDay BETWEEN @Start AND @End--开始日期或结束日期 为休息日if(datename(hh,@Start) < 12) select @RestDays = (@RestDays-0.5) From BaseRestDay where BaseDay=@Startif(datename(hh,@End) >= 12) select @RestDays = (@RestDays-1) From BaseRestDay where BaseDay=@End elseselect @RestDays = (@RestDays-0.5) From BaseRestDay where BaseDay=@EndEnd --step3 合计set @Days = @AllDays - @RestDays -- 合计工日不能为负数,否则为0if(@Days<0) set @Days = 0 if(@ArgStart > @ArgEnd)Set @Days = -@Days RETURN @Days
END
记下来,用的时候方便查找。
SQL Server 去除节假日天数,获取实际工作日天数相关推荐
- SQL计算两个日期之间的工作日天数,去除法定节假日和周末
项目要求:需要计算两个日期之间的工作日天数,包含元旦.五一.十一等法定假日. 网上查询很多SQL函数,最终发现都不太理想,例如国庆放假可能会调休,周末也要上班.所以唯一的解决方案是建立一张工作日时间表 ...
- Sql server 去除字段回车换行符
Sql Server 去回车换行 个人小笔记 个人小笔记 去除回车符sql 语句: Update 表名 Set 字段名=Replace(字段名,char(13),'') 去除换行符sql 语句: Up ...
- php获取当月工作日天数,2018年每月工作日天数多少天?2018年工作日总天数有多少天...
随着新的一年开启,不少人都在问今年的上班天数会有几天,2018年每月工作日天数多少天?2018年工作日总天数有多少天?小编整理相应的出勤天数,下面一起来看下吧. 2018年有多少个工作日 2018年有 ...
- java取geosever数据_Geoserver - 连接到SQL Server 2008 Express并获取数据
Bref history: - 我正在使用MapServer,一切都运行正常,除了当我使用PixMap直接在图层上绘制标记时,它在tile之间切割 . 因此,我决定更改为GeoServer,它看起来能 ...
- SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)
这是计算一个月第一天的SQL 脚本: SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DAT ...
- SQL server插入数据后,获取自增长字段的值
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 insert into Tb_People(uname,era, ...
- SQL计算两个日期之间的工作日天数
https://blog.csdn.net/qq_37436998/article/details/85867729 参考这篇文章,先创建数据库,然后通过插入数据库一个函数,这样写SQL的时候就调用这 ...
- sql server 计算2个日期相差的 天数,月数,年数,日期运算/计算
--天数 select datediff(day,'2004-09-01','2004-09-02') --年数 select datediff(month,'2004-09-01','2004-10 ...
- sql server 2005 时间转化获取年,有一个时间如2009-07-15,现在要分别查出年、月、日,...
select year(日期字段),month(日期字段),day(日期字段) from 表
- RDS SQL Server死锁(Deadlock)系列之五利用Extended Events获取死锁信息
问题引入 在过去很长一段时间,不断有客人会问道:"在事先没有任何跟踪或者监控部署的情况下,阿里云RDS SQL Server有没有办法获取到历史死锁信息,供我们分析?".在写到RD ...
最新文章
- 086_html5Input类型
- 《OpenGL ES 3.x游戏开发(上卷)》一1.5 Android应用程序运行的机制
- php check name,checkname.php
- oracle 12 问题:需要 Oracle 客户端软件 8.1.7 或更高版本
- 【基础】pandas中apply与map的异同
- Boost.MultiIndex 复合键的例子
- AI时代的全链路监控,阿里工程师怎么做?
- MGTemplateEngine 模版发动机简单使用
- 如何用计算机装手机系统,如何用手机usb重装电脑系统
- 2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决
- linux-用户的创建
- CoolUIViewAnimations
- 在git 服务器挂载、创建新的项目、克隆新的项目
- flask web开发是前端还是后端_后端开发该不该学前端开发?
- python滚动条翻页爬取数据_scrapy实践之翻页爬取的实现
- Stata制作限制立方样条(RCS)(2)
- Phaser学习笔记
- mysql插入路径_Conventional-pathinsert(传统路径插入)
- 比excel好用,还能解决数据孤岛问题,这款报表工具千万别错过
- java.lang.OutOfMemoryError: PermGen space
热门文章
- 康师傅就“水源事件”发声明 称矿物质水合标
- html 还原键盘默认事件,js阻止默认事件 (两种方法)及键盘事件onkeydown 、 onkeypress 、onkeyup实例讲解...
- dir_recurse是 php函数,dir_recurse是一个函数么?
- UWB定位技术原理图解
- 图片底色去除vue+canvas(简易版)
- PHP可以干数据分析师吗,在 NBA 做数据分析师是什么样的体验?
- 图片格式批量转换器 - 支持 JPG、JPEG、PNG、BMP、GIF 等多种格式图片相互批量转换
- 写在控制层的VO是什么?
- freemarker加载模板目录的方法
- P2P网贷黎明前夕的黑夜---P2P是否要被封杀呢