sqlserver两个日期之间的年数_SQL语句计算两个日期之间有多少个工作日的方法
/*
因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日。
设定是一个星期有5个工作日,从星期一到星期五
说明:
第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天
末一个星期的工作日数:DATEPART(dw, @enddt),最多5天
计算方法:
如果两个日期处在同一个星期内,直接计算“第一个星期的工作日数”
否则按下面的公式计算
(两个日期间的总天数 - 第一个星期的天数 - 末一个星期的天数) / 7 * 5
+ 第一个星期的工作日数
+ 末一个星期的工作日数
*/
--计算并返回两个日期间的工作小时数(工作日*8)按周一到周五计算
--必须先SET DATEFIRST 1
CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME)
RETURNS INTEGER
AS BEGIN
DECLARE @hours INTEGER
IF @@DATEFIRST <> 1 OR @bdate > @edate
RETURN -1
SELECT @hours =
--如果终止日期与起始日期在同一个星期内,只需要计算有几天即可
CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN
CASE WHEN DATEPART(dw, @bdate) > 5 THEN 0
WHEN DATEPART(dw, @edate-1) > 5 THEN 6 - DATEPART(dw, @bdate)
ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
--如果终止日期与起始日期在不同的星期内
--首先计算出除前后两个星期外完整的星期数 * 5
ELSE (DATEDIFF(dd,@bdate,@edate)
- (8-DATEPART(dw, @bdate))
- DATEPART(dw, @edate-1)) / 7 * 5
--再加上第一个星期里的工作日数
+ CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate)
ELSE 0 END
--加上末一个星期里的工作日数
+ CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END
END * 8
RETURN @hours
END
以上就是本文的全部内容,希望对大家的学习有所帮助。
sqlserver两个日期之间的年数_SQL语句计算两个日期之间有多少个工作日的方法相关推荐
- mysql 日期相减输出天数_SQL是计算两个日期相差多少天数的函数?
展开全部 SQL是高e5a48de588b662616964757a686964616f31333365633961级的非过程化编程语言,一般针对数据库进行操作. 定义:datediff(day/mo ...
- java 计算两个日期相差月数_Java简单计算两个日期月数差的方法
本文实例讲述了Java简单计算两个日期月数差的方法.分享给大家供大家参考,具体如下: /** * 获取两个日期相差的月数 * @param d1 较大的日期 * @param d2 较小的日期 * @ ...
- 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数。
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 题目: [实验案例3:函数的递归调用] 编写函数求两个数的最大公约数,采用递归法计算两数的最大公约数. [实验指导] 分析:m.n为两 ...
- php for循环语句计算1~100之间奇数的和
php 利用for循环语句计算1-100之间奇数的和 <php sum=0;for(sum =0;for(sum=0;for(i=0,i<100,i<100,i<100,i++ ...
- java中怎么通过日期算出天数_Java如何通过计算两个日期的时间差来算出天数
Java如何通过计算两个日期的时间差来算出天数,年月日,天数,时间,退房,时分 Java如何通过计算两个日期的时间差来算出天数 易采站长站,站长之家为您整理了Java如何通过计算两个日期的时间差来算出 ...
- RGB转一维线性色彩空间计算两个颜色的距离.判断颜色是否相近.计算两个颜色的差.
我最近在解决一个问题, 想计算两个小图片的相似性. 为了简化计算我打算把rgb三种颜色的分离数值合并成一个数值. 两种颜色越是相近, 这两个数值的差越小例如 颜色 #000001和颜色#000002的 ...
- c语言中用if语句计算两数之差的绝对值,用位运算实现求绝对值-有效避开if-else判断...
用位运算实现求绝对值-有效避开if-else判断 By SmartPtr(http://www.cppblog.com/SmartPtr/) 一般情况下,如果要我们写一个求绝对值的函数,我们的实现很有 ...
- mysql中两个表连接_SQL语句中两个表的连接
展开全部 一.外连接 1.左连接 left join 或 left outer join SQL语句:select * from student left join score on student ...
- access日期如何增加年数_ACCESS支持的时间日期函数
ACCESS支持的时间日期函数 参考文章一: 找了半天,终于在微软的网站找到了,对于做ACCESS数据库开发人来说还是有点用处的,有时间的话我会把它翻译成中文.(注:其中大部分对于Access是适用了 ...
最新文章
- python各个解释器的用途-【Python面试】 说说Python解释器种类以及特点?
- Android中shape的使用
- 收藏的2个正则html标签剔除方法
- wordpress 独立 php,wordpress怎么把所有文章分类单独在一个页面显示
- linux 查询内存和核心数,Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数...
- WIN2003下×××服务器架设攻略
- mysql单表备份语句 +多表
- ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
- midlet_如何在J2ME中创建MIDlet
- 让VS2010添加新类时自动添加public关键字(来自dudu博文)
- 《Android游戏开发详解》——第2章,第2.10节使用对象
- java注解枚举转换器_java – Annotation处理器:从TypeMirror或TypeElement获取所有枚举值...
- win10下JDK安装,配置环境变量后出现error:could not open '...jvm.cfg'
- Appium自动化测试-iOS
- 微信小程序调用域名服务器的服务
- 创业公司系统安全的搭建
- 2016 杭州云栖大会随笔
- 《微观经济学》 第九章
- #4508. Triples I
- 沙盒和App Group