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计算实际工作日(天)及两个时间(工作日)间隔(小时)!的更多相关文章

  1. javascript中计算两个时间日期间隔的天数

    <script>              /*                  计算两个日期的时间间隔天数              */              //时间字符串的格 ...

  2. winform timespan 两个时间的间隔(差) 分类: WinForm 2014-04-15 10:14 419人阅读 评论(0) 收藏

    TimeSpan 结构  表示一个时间间隔. 先举一个小例子:(计算两个日期相差的天数) 代码如下: DateTime dt = DateTime.Now.ToShortDateString(yyyy ...

  3. GoLang 获取两个时间相差多少小时

    package main import ( "fmt" "time" ) func main() { fmt.Println(getHourDiffer(&qu ...

  4. js前台计算两个日期的间隔时间(时间差)

    在后台传来两个时间字段,从中解析出两个字符串类型的日期格式 需要在前台解析出两个时间的间隔 这里采用获取两个日期的时间戳进行计算 时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时 ...

  5. js前台计算两个日期的间隔时间

    js前台计算两个日期的间隔时间(时间差)原创 2017年08月28日 16:09:43 标签:javascript 1144在后台传来两个时间字段,从中解析出两个字符串类型的日期格式 需要在前台解析出 ...

  6. java 判断两个时间相差的天数

    1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的   ...

  7. C#两个时间的时间差的方法

    今天遇到一问题,计算两个时间的时间差,看网上的写法较为复杂,找到个简单点的,记录下作为自己的总结. 关键函数: DateTime.Subtract 函数解释: 从此实例中减去指定的日期和时间,返回一个 ...

  8. Java判断两个时间相差的天数

    1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的   ...

  9. java判断两个时间相差得天数

    方法一:通过Calendar类得日期比较,在这需要考虑闰年和平年,也要考虑跨年份 /** * date2比date1多的天数 * @param date1 * @param date2 * @retu ...

  10. 【HANA系列】SAP HANA SQL计算两个日期的差值

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算两个 ...

随机推荐

  1. 快速、直接的XSS漏洞检测爬虫 – XSScrapy

    XSScrapy是一个快速.直接的XSS漏洞检测爬虫,你只需要一个URL,它便可以帮助你发现XSS跨站脚本漏洞. XSScrapy的XSS漏洞攻击测试向量将会覆盖 Http头中的Referer字段 U ...

  2. .NET中JSON的序列化和反序列化

    .NET 中有两种方法进行JSON的操作分别需要引用不同的命名空间 1.System.Runtime.Serialization.Json(System.Runtime.Serialization.d ...

  3. 金融证券协议FIX/FAST/STEP

    金融信息交换协议FIX是适用于实时证券.金融电子交易的数据通信标准.它是把各类证券金融业务需求流程格式化,使之成为一个可用计 算机语言描述的功能流程,并在每个业务功能接口上统一交换格式.STEP(Se ...

  4. P==NP??

    注:基础知识见下方 下面是关于P==NP ???  一些讨论,挺好玩的. 1. 首先强调一下数学上还没有证明这个问题!但是我们看看其他角度来看这个问题. 其次,心理上来说,要是可以证明P==NP那么早 ...

  5. POJ 2028

    #include <iostream> #define MAXN 200 using namespace std; int mark[MAXN]; int main() { //freop ...

  6. Android中 ListView 详解(二)

    本文版权归 csdn noTice501 所有,转载请详细标明原作者及出处,以示尊重! 作者:noTice501 原文:http://blog.csdn.net/notice520/article/d ...

  7. php怎么获取checkbox复选框的内容?

    由于checkbox属性,所有必须把checkbox复选择框的名字设置为一个如果checkbox[],php才能读取,以数据形式,否则不能正确的读取checkbox复选框的值哦. <form n ...

  8. poj 1733(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 思路:这题一看就想到要用并查集做了,不过一看数据这么大,感觉有点棘手,其实,我们仔细一想可以发现,我们需要记录的是出现过的节点到 ...

  9. AssemblyInfo.cs文件参数具体讲解

    在asp.net中有一个配置文件AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数,下面是默认的AssemblyInfo.cs文件的内容具体介绍 //是否符合公共 ...

  10. 卷积相关公式的matlab代码

    取半径=3 用matlab代码实现上式公式: length=3;for Ki = 1:length for Kj = 1:length for Kk = 1:length Ksigma(Ki,Kj,K ...