SQL计算实际工作日(天)及两个时间(工作日)间隔(小时)!
Code highlighting produced by Actipro CodeHighlighter (freeware)-->去掉法定节假日(周六,周天)和指定节假日
USE [DBName]
GO
/****** 对象: Table [dbo].[T_SYS_Holiday] 脚本日期: 11/08/2010 16:04:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[T_SYS_Holiday](
[id] [int] IDENTITY(,) NOT NULL,
[name] [varchar]() COLLATE Chinese_PRC_CI_AS NOT NULL,
[Hdate] [datetime] NOT NULL,
[isholiday] [varchar]() COLLATE Chinese_PRC_CI_AS NOT NULL,
CONSTRAINT [PK_T_SYS_Holiday] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] GO
SET ANSI_PADDING OFF 表记录示例:
国庆节 -- :: 节假日
国庆补班 -- :: 非节假日
国庆补班 -- :: 非节假日
国庆 -- :: 节假日
国庆 -- :: 节假日
国庆 -- :: 节假日
国庆 -- :: 节假日
国庆 -- :: 节假日
国庆 -- :: 节假日
中秋补班 -- :: 非节假日
中秋补班 -- :: 非节假日
中秋 -- :: 节假日
中秋 -- :: 节假日
中秋 -- :: 节假日 --计算实际工作日(单位:天)
create FUNCTION [dbo].[fn_WorkDay](
@dt_begin datetime, --计算的开始日期
@dt_end datetime --计算的结束日期
)RETURNS int
AS
BEGIN
DECLARE @workday int,@bz bit,@dt datetime
IF @dt_begin> @dt_end
SELECT @bz=,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET @bz=
set @workday=
WHILE @dt_begin+<=@dt_end
BEGIN
SELECT @workday=CASE
WHEN ((((@@DATEFIRST+DATEPART(Weekday,@dt_begin)-)% BETWEEN AND )or @dt_begin in(
select Hdate from t_sys_holiday where isholiday='非节假日'
))
and (@dt_begin not in(select Hdate from t_sys_holiday where isholiday='节假日')))
THEN @workday+ ELSE @workday END,
@dt_begin=@dt_begin+
END
RETURN(CASE WHEN @bz= THEN -@workday ELSE @workday END)
END --计算实际工作时间(单位:小时)
create FUNCTION [dbo].[fn_WorkHour](
@dt_begin datetime, --计算的开始日期
@dt_end datetime --计算的结束日期
)RETURNS int
AS
BEGIN
DECLARE @workhour int,@workday int,@bz bit,@dt datetime ,@memorybegin_dt datetime
IF @dt_begin> @dt_end
SELECT @bz=,@dt=@dt_begin,@dt_begin=@dt_end,@dt_end=@dt
ELSE
SET @bz=
set @workhour=
SET @workday=
SET @memorybegin_dt=@dt_begin
WHILE dateadd(hh,,dateadd(hh,,@dt_begin))<=@dt_end
BEGIN
SELECT @workhour=CASE
WHEN ((((@@DATEFIRST+DATEPART(Weekday,@dt_begin)-)% BETWEEN AND )or @dt_begin in(
select Hdate from t_sys_holiday where isholiday='非节假日'
)) and (@dt_begin not in(select Hdate from t_sys_holiday where isholiday='节假日')))
THEN @workhour+ ELSE @workhour END
set @dt_begin=dateadd(hh,,dateadd(hh,,@dt_begin))
END
set @workhour=@workhour--datediff(hh,@memorybegin_dt+@workday,@dt_end)
RETURN(CASE WHEN @bz= THEN -@workhour ELSE @workhour END)
END select dbo.fn_WorkDay('2010-11-04 09:09:09','2010-11-05 09:09:09') --
select dbo.fn_WorkDay('2010-11-04 09:09:09','2010-11-06 09:09:09') --
select dbo.fn_WorkDay('2010-11-04 09:09:09','2010-11-07 09:09:09') --
select dbo.fn_WorkDay('2010-11-04 09:09:09','2010-11-08 09:09:09') -- select dbo.[fn_WorkHour]('2010-11-04 09:09:09','2010-11-05 09:09:09')--
select dbo.[fn_WorkHour]('2010-11-04 09:09:09','2010-11-06 09:09:09')--
select dbo.[fn_WorkHour]('2010-11-04 09:09:09','2010-11-07 09:09:09')--
select dbo.[fn_WorkHour]('2010-11-04 09:09:09','2010-11-08 09:09:09')--
SQL计算实际工作日(天)及两个时间(工作日)间隔(小时)!的更多相关文章
- javascript中计算两个时间日期间隔的天数
<script> /* 计算两个日期的时间间隔天数 */ //时间字符串的格 ...
- winform timespan 两个时间的间隔(差) 分类: WinForm 2014-04-15 10:14 419人阅读 评论(0) 收藏
TimeSpan 结构 表示一个时间间隔. 先举一个小例子:(计算两个日期相差的天数) 代码如下: DateTime dt = DateTime.Now.ToShortDateString(yyyy ...
- GoLang 获取两个时间相差多少小时
package main import ( "fmt" "time" ) func main() { fmt.Println(getHourDiffer(&qu ...
- js前台计算两个日期的间隔时间(时间差)
在后台传来两个时间字段,从中解析出两个字符串类型的日期格式 需要在前台解析出两个时间的间隔 这里采用获取两个日期的时间戳进行计算 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时 ...
- js前台计算两个日期的间隔时间
js前台计算两个日期的间隔时间(时间差)原创 2017年08月28日 16:09:43 标签:javascript 1144在后台传来两个时间字段,从中解析出两个字符串类型的日期格式 需要在前台解析出 ...
- java 判断两个时间相差的天数
1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 ...
- C#两个时间的时间差的方法
今天遇到一问题,计算两个时间的时间差,看网上的写法较为复杂,找到个简单点的,记录下作为自己的总结. 关键函数: DateTime.Subtract 函数解释: 从此实例中减去指定的日期和时间,返回一个 ...
- Java判断两个时间相差的天数
1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的 ...
- java判断两个时间相差得天数
方法一:通过Calendar类得日期比较,在这需要考虑闰年和平年,也要考虑跨年份 /** * date2比date1多的天数 * @param date1 * @param date2 * @retu ...
- 【HANA系列】SAP HANA SQL计算两个日期的差值
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算两个 ...
随机推荐
- Web流程
Web阻塞加载,异步加载. 延迟执行,立即执行. 加载并执行,不要调用代码. 加载并执行时会调用代码,但是加载并执行时不要调用代码,否则会改变逻辑. 上面是Web流程,JS只是web的一部分.如果关注 ...
- cache应用(asp.net 2.0 SQL数据缓存依赖 [SqlCacheDependency ] )
Asp.net 2.0 提供了一个新的数据缓存功能,就是利用sql server2005 的异步通知功能来实现缓存 1.首先在sqlserver2005 中创建一个test的数据库. 在SQL Ser ...
- socket异步通信-如何设置成非阻塞模式、非阻塞模式下判断connect成功(失败)、判断recv/recvfrom成功(失败)、判断send/sendto
socket异步通信-如何设置成非阻塞模式.非阻塞模式下判断connect成功(失败).判断recv/recvfrom成功(失败).判断send/sendto 博客分类: Linux Socket s ...
- HTML5 canvas 绘图步骤
1.先把canvas选出来,不选出来你往哪儿画! var oCan= document.getElementById('xxx'); 2.声明基于 canvas 的context对象,没他你怎么调用 ...
- NodeJS模块、包、NPM
1.NodeJS模块 每一个Nodejs都是一个NodeJS模块,包括JS文件,JSON文本文件,二进制模块文件. a.模块的应用 新建一个文件mytest. ...
- 服务接口API限流 Rate Limit 续
一.前言 上一篇文章中粗浅的介绍使用Redis和基于令牌桶算法进行对服务接口API限流,本文介绍另一种算法---漏桶算法的应用.Nginx想必大家都有所了解是一个高性能的 HTTP 和反向代理服务器, ...
- 安装软件(名称不记得了)后,系统开机提示 visual studio just-in-time debugger窗口(WINDOWS错误提示框)
出现这种情况,往往是因为原先安装有VS,后来因某些原因(比如:卸载)导致VS无法使用!!当系统中的有些软件出现错误时,会自动调用vs进行调试,但因为VS无法使用,就出现了visual studio j ...
- 《Thinking in C++》学习笔记(一)【第二章】
第二章 对象的创建与使用 2.1语言的翻译过程 翻译器分为两类:解释器(interpreter)和编译器(compiler). 2.1.1解释器 解释器将源代码转化成一些动作(它可由许多机器指令组成) ...
- Linux中ping命令
Linux系统的ping命令是常用的网络命令,它通常用来测试与目标主机的连通性,我们经常会说“ping一下某机器,看是不是开着”.不能打开网页时会说“你先ping网关地址192.168.1.1试试”. ...
- jquery常见问题
1.下面哪种说法是正确的? 您的回答:jQuery 是 JavaScript 库 2.jQuery 使用 CSS 选择器来选取元素? 您的回答:错误 正确答案:正确 3.jQuery 的简写是? 您的 ...