自定义节假日日历,去除节假日天数,获取实际工作日天数,最小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 去除节假日天数,获取实际工作日天数相关推荐

  1. SQL计算两个日期之间的工作日天数,去除法定节假日和周末

    项目要求:需要计算两个日期之间的工作日天数,包含元旦.五一.十一等法定假日. 网上查询很多SQL函数,最终发现都不太理想,例如国庆放假可能会调休,周末也要上班.所以唯一的解决方案是建立一张工作日时间表 ...

  2. Sql server 去除字段回车换行符

    Sql Server 去回车换行 个人小笔记 个人小笔记 去除回车符sql 语句: Update 表名 Set 字段名=Replace(字段名,char(13),'') 去除换行符sql 语句: Up ...

  3. php获取当月工作日天数,2018年每月工作日天数多少天?2018年工作日总天数有多少天...

    随着新的一年开启,不少人都在问今年的上班天数会有几天,2018年每月工作日天数多少天?2018年工作日总天数有多少天?小编整理相应的出勤天数,下面一起来看下吧. 2018年有多少个工作日 2018年有 ...

  4. java取geosever数据_Geoserver - 连接到SQL Server 2008 Express并获取数据

    Bref history: - 我正在使用MapServer,一切都运行正常,除了当我使用PixMap直接在图层上绘制标记时,它在tile之间切割 . 因此,我决定更改为GeoServer,它看起来能 ...

  5. SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日等等)

    这是计算一个月第一天的SQL 脚本:   SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --当月的第一天 SELECT DATEADD(mm, DAT ...

  6. 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, ...

  7. SQL计算两个日期之间的工作日天数

    https://blog.csdn.net/qq_37436998/article/details/85867729 参考这篇文章,先创建数据库,然后通过插入数据库一个函数,这样写SQL的时候就调用这 ...

  8. sql server 计算2个日期相差的 天数,月数,年数,日期运算/计算

    --天数 select datediff(day,'2004-09-01','2004-09-02') --年数 select datediff(month,'2004-09-01','2004-10 ...

  9. sql server 2005 时间转化获取年,有一个时间如2009-07-15,现在要分别查出年、月、日,...

    select year(日期字段),month(日期字段),day(日期字段) from 表

  10. RDS SQL Server死锁(Deadlock)系列之五利用Extended Events获取死锁信息

    问题引入 在过去很长一段时间,不断有客人会问道:"在事先没有任何跟踪或者监控部署的情况下,阿里云RDS SQL Server有没有办法获取到历史死锁信息,供我们分析?".在写到RD ...

最新文章

  1. 086_html5Input类型
  2. 《OpenGL ES 3.x游戏开发(上卷)》一1.5 Android应用程序运行的机制
  3. php check name,checkname.php
  4. oracle 12 问题:需要 Oracle 客户端软件 8.1.7 或更高版本
  5. 【基础】pandas中apply与map的异同
  6. Boost.MultiIndex 复合键的例子
  7. AI时代的全链路监控,阿里工程师怎么做?
  8. MGTemplateEngine 模版发动机简单使用
  9. 如何用计算机装手机系统,如何用手机usb重装电脑系统
  10. 2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决
  11. linux-用户的创建
  12. CoolUIViewAnimations
  13. 在git 服务器挂载、创建新的项目、克隆新的项目
  14. flask web开发是前端还是后端_后端开发该不该学前端开发?
  15. python滚动条翻页爬取数据_scrapy实践之翻页爬取的实现
  16. Stata制作限制立方样条(RCS)(2)
  17. Phaser学习笔记
  18. mysql插入路径_Conventional-pathinsert(传统路径插入)
  19. 比excel好用,还能解决数据孤岛问题,这款报表工具千万别错过
  20. java.lang.OutOfMemoryError: PermGen space

热门文章

  1. 康师傅就“水源事件”发声明 称矿物质水合标
  2. html 还原键盘默认事件,js阻止默认事件 (两种方法)及键盘事件onkeydown 、 onkeypress 、onkeyup实例讲解...
  3. dir_recurse是 php函数,dir_recurse是一个函数么?
  4. UWB定位技术原理图解
  5. 图片底色去除vue+canvas(简易版)
  6. PHP可以干数据分析师吗,在 NBA 做数据分析师是什么样的体验?
  7. 图片格式批量转换器 - 支持 JPG、JPEG、PNG、BMP、GIF 等多种格式图片相互批量转换
  8. 写在控制层的VO是什么?
  9. freemarker加载模板目录的方法
  10. P2P网贷黎明前夕的黑夜---P2P是否要被封杀呢