Sql server 查询指定时间区间工作日数、休息日数等日期操作
1、查询指定时间区间的工作日
这个主要难点是法定节假日,国家的法定节假日每年都不一样,还涉及到调休,所以我们设计一个假日表。主要字段有年份,类型(是否调休),假期日期。如下:
CREATE TABLE [dbo].[Holidays](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Holiday] [datetime2](7) NULL,--假期日期 [YearS] [char](4) NULL,--年份
[daytype] [int] NULL--类型 )
添加好当年的假期和调休日期
写个方法计算出除开法定假日的工作日
ALTER FUNCTION [dbo].[GetWorkerDays] ( -- Add the parameters for the function here @StartTime DATETIME, -- 起始时间 @EndTime DATETIME -- 结束时间,查询默认小于此时间 ) RETURNS INT AS BEGIN DECLARE @Total INT; DECLARE @Temp INT; DECLARE @Days INT; DECLARE @Index INT; SET @Days = DATEDIFF(DAY,@StartTime,@EndTime); SET @Index = 0; SET @Temp = 0; SET @Total = 0; WHILE @Index < @Days BEGIN SET @Temp = DatePart(WEEKDAY,DATEADD(DAY,@Index,@StartTime)); IF @Temp > 1 AND @Temp < 7 BEGIN SET @Total = @Total + 1; END SET @Index = @Index + 1; END RETURN ISNULL(@Total,0) END
执行这个表值函数后加上调休日和减去法定假日就是工作日了,大家可以再写一个存储过程。
2,计算指定日期段的休息日
这个跟那个相反,就是星期天加上法定假日在减去调休日
我们写一个函数
ALTER FUNCTION GetRestDays ( @StartTime DATETIME2, @EndTime DATETIME2 ) RETURNS INT AS BEGIN DECLARE @LegalRest INT --法定假期 DECLARE @AdjustmentDay INT--调休上班时间 DECLARE @SurplusDay INT --剩余工作日 DECLARE @CountDay INT --总共天数 SELECT @LegalRest=COUNT(0) FROM dbo.Holidays WHERE daytype=1 AND YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) AND Holiday>=@StartTime AND Holiday<=@EndTime SELECT @AdjustmentDay=COUNT(0) FROM dbo.Holidays WHERE daytype=2 AND YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) AND Holiday>=@StartTime AND Holiday<=@EndTime SET @SurplusDay= [dbo].[GetWorkerDays](@StartTime,DATEADD(DAY,1,@EndTime))--剩余工作日 SELECT @CountDay=COUNT(0) FROM dbo.TimeSpanDays(@StartTime ,DATEADD(DAY,1,@EndTime)) --总共天数 计算出 时间段总共天数 return @CountDay-@SurplusDay+@LegalRest-@AdjustmentDay END
3、计算当前前月初日期和月末日期
月初
简单:
SELECT CONVERT(VARCHAR(7),GETDATE(),120)+'-01'
月末日期
这个也简单简单:就是月第一天加一月再减去一天
SELECT DATEADD(DAY,-1, DATEADD(MONTH,1, CONVERT(VARCHAR(7),GETDATE(),120)+'-01'))

Sql server 查询指定时间区间工作日数、休息日数等日期操作的更多相关文章
- sql server还原到指定时间
BACKUP LOG yjxy_1010 TO DISK='d:\yixy_log.bak' WITH FORMAT 数据库右击->任务->还原->还原事务日志.
- sql server 查询某个时间段共有多少周及每周的日期段
sql 语句 as wknum,dateadd(wk,number,'2017-01-01') as firstday, (,, then '2017-12-31' ,,'2017-01-01')) ...
- ylb:SQL Server中的时间函数
ylbtech-SQL Server:SQL Server-SQL Server中的时间函数 SQL Server中的时间函数. 1,SQL Server中的时间函数 返回顶部 1. 当前系统日期 ...
- [转] 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能
首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...
- SQL SERVER 查询性能优化——分析事务与锁(五)
SQL SERVER 查询性能优化——分析事务与锁(一) SQL SERVER 查询性能优化——分析事务与锁(二) SQL SERVER 查询性能优化——分析事务与锁(三) 上接SQL SERVER ...
- 利用SET STATISTICS IO和SET STATISTICS TIME 优化SQL Server查询性能
首先需要说明的是这篇文章的内容并不是如何调节SQL Server查询性能的(有关这方面的内容能写一本书),而是如何在SQL Server查询性能的调节中利用SET STATISTICS IO和SET ...
- 使用WinDbg调试SQL Server查询
上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...
- SQL Server查询性能优化——堆表、碎片与索引(一)
SQL Server在堆表中查询数据时,是不知道到底有多少数据行符合你所指定的查找条件,它将根据指定的查询条件把数据表的全部数据都查找 一遍.如果有可采用的索引,SQL Server只需要在索引层级查 ...
- SQL Server查询性能优化——堆表、碎片与索引(二)
本文是对 SQL Server查询性能优化——堆表.碎片与索引(一)的一些总结. 第一:先对 SQL Server查询性能优化——堆表.碎片与索引(一)中的例一的SET STATISTICS IO之 ...
随机推荐
- 每天一个Linux命令(2):ls命令
版权声明 更新:2017-04-26博主:LuckyAlan联系:liuwenvip163@163.com声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下命令ls. 2 开 ...
- ACM学习历程——HDU5202 Rikka with string(dfs,回文字符串)
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...
- 自动拆装箱(int,Integer)
包装类型Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个 ...
- BZOJ3127:[USACO2013OPEN]Yin and Yang
浅谈树分治:https://www.cnblogs.com/AKMer/p/10014803.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem. ...
- 对于makefile传递参数的一些问题
makefile变量说明: 1.总控Makefile中使用“-e”参数覆盖下一层Makefile中的变量. 2.父级Makefile向子级Makefile传送变量方式:export <varia ...
- github怎么创建一个项目,怎么添加一个ssh-key的客户
1.第一步:打开https://github.com/,登陆成功.单击猫图标,进入页面,单击[start a project] 第二步:输入项目名称,选择public公有,不收费的.单击确认成功. 第 ...
- Druid 在spring中的配置
Spring配置中dataSource配置 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDat ...
- [解决问题]SSH连不上Ubuntu虚拟机解决办法
1. 安装openssh-client Ubuntu默认缺省安装了openssh-client,apt-get安装即可 sudo apt-get install openssh-client 2. 安 ...
- emacs for OCaml
(require 'cl) (require 'package) (add-to-list 'package-archives '("melpa" . "https:// ...
- 在Spring环境下存取properties文件…
Spring中PropertyPlaceholderConfigurer的使用 (1) 基本的使用方法是 classpath:/spring/include/dbQuery.properties 其中 ...