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之 ...
随机推荐
- bzoj 3376 [Usaco2004 Open]Cube Stacking 方块游戏——带偏移量的并查集
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3376 带偏移量的并查集. #include<iostream> #include ...
- CF 504 E —— Misha and LCP on Tree —— 树剖+后缀数组
题目:http://codeforces.com/contest/504/problem/E 快速查询LCP,可以用后缀数组,但树上的字符串不是一个序列: 所以考虑转化成序列—— dfs 序! 普通的 ...
- mac下nginx的安装
新手初学,按照网上的教程,一步一步来进行安装.把自己的安装流程贴出来. 1 安装nginx需要三方的lib库pcre.因此先下载pcre. 在这里,需要注意的是安装的pcre的版本要与nginx对应. ...
- C# 线程的暂停和恢复的 实现
我们可以通过ManualResetEvent类来实现. 声明, 初始化时不执行 private static ManualResetEvent _eventWorkList = new ManualR ...
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
2017-03-16 11:23:29.601 1238 ERROR nova.compute.manager [instance: 3f195047-250a-4eb5-8da0-63bea6e26 ...
- [hiho1586]Minimum
题意:区间内乘积最小值,带修改.解题关键:线段树裸题,考场上以为x y必须不等,还维护了次小值,尼玛嗨尼玛嗨,划水一整场,心态爆炸. 注意坐标需要+1 #include<cstdio> # ...
- HDOJ-2153
仙人球的残影 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- TripAdvisor architecture 2011/06
http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-vi ...
- echarts学习的一些笔记
工具栏组件 Show 是否显示 Feature 具体显示的功能 saveAslmage 保存图片 Restore 还原 dataZoom 缩放视图 magicType 动态类型切换 toltip组 ...
- CentOS7 环境下MySQL5.7 PHP7的安装
用的都是最新版的包 : php7 mysql5.7 nginx1.8 zabbix3.2.6 替换源为阿里云的源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/ ...