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之 ...
随机推荐
- java面试题05
1.写一个冒泡排序的算法 升序排列: public static void main(String[] args) { int score[] = { 67, 20, 75, 87, 89, 90, ...
- css3 实现loading效果
1 圆点渐入渐出 要点: 缩放和透明度的变化,循环变化 <div class="demo1"></div> .demo1{ width: 40px; hei ...
- React库protypes属性
Prop 验证 随着应用不断变大,保证组件被正确使用变得非常有用.为此我们引入propTypes.React.PropTypes 提供很多验证器 (validator) 来验证传入数据的有效性.当向 ...
- JSP编译指令、JSP动作指令
JSP编译指令:通过指令中的属性配置来向JSP容器发出指令,用来控制JSP页面的某些特征 JSP指令格式:<%@ 指令名 [一个或多个指令属性]%> 1.page:用于对JSP页面中的 ...
- Pseudo Random Nubmer Sampling
Pseudo Random Nubmer Sampling https://en.wikipedia.org/wiki/Inverse\_transform\_sampling given a dis ...
- ASPNET session客户端与服务…
除非程序通知服务器删除一个session,否则服务器会一直保留,程序一般都是在用户做log off的时候发个指令去删除session.然而浏览器从来不会主动在关闭之前通知服务器它将要关闭,因此服务器根 ...
- go开发环境搭建及开发工具简介
go语言包的下载地址:https://www.golangtc.com/download 这里以window10的操作系统环境为例 go的开发工具下载地址:https://www.golangtc.c ...
- “MVC+Nhibernate+Jquery-EasyUI”信息发布系统 第一篇
一.第一篇内容中必须得简单的介绍一下MVC(在大学时用的是WebForm,拖控件感觉很爽,但是工作后,技术总监让一定要放弃这种 想法!) 1.MVC是什么?:(1) ASP.NET MVC是微软官方提 ...
- Android开发中,那些让你觉得相见恨晚的方法、类或接口
Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[],而在StackTraceElement类中有四个方 ...
- unity打包iOS上线归纳
1.去https://developer.apple.com登陆账号去生成打包用的签名文件,生成一个测试用的和一个上线发布用的签名文件 注意:签名文件绑定id必须和应用绑定包命一致,iOSapp唯一性 ...