【无标题】SQL server 计算工作日(排除双休日)
计算工作日时间差
--计算工作时间相差小时数
CREATE FUNCTION dbo.fun_CalculateWorkdays
(
@startdate DATETIME, -- 开始日期
@enddate DATETIME -- 结束日期(结束日期须大于开始日期)
)
RETURNS INT
AS
BEGIN
--工作时间08:00--17:00
declare @shour int, @intdays INT, @currentdate DATETIME
SET @intdays = 0
if datepart(hour,@startdate)<8
begin
--开始时间在8点前,算成8点
set @startdate=CONVERT(nvarchar(10),@startdate,120)+' '+'08:00:00'
end
if datepart(hour,@startdate)>17
begin
--开始时间在17点后,算成17点
set @startdate=CONVERT(nvarchar(10),@startdate,120)+' '+'17:00:00'
end
if datepart(hour,@enddate)<8
begin
--结束时间在8点前,前一天算成17点
set @enddate=CONVERT(nvarchar(10),@startdate-1,120)+' '+'17:00:00'
end
if datepart(hour,@enddate)>17
begin
--结束时间在17点后,算成17点
set @startdate=CONVERT(nvarchar(10),@startdate,120)+' '+'17:00:00'
end
SET @currentdate = @startdate
IF (DATEDIFF(d, @startdate, @enddate) < 0 OR @startdate IS NULL OR @enddate IS NULL OR @startdate = '' OR @enddate = '')
SET @intdays = 0
ELSE
BEGIN
WHILE (DATEDIFF(d, @currentdate, @enddate) >= 0)
BEGIN
IF (DATEPART(dw, @currentdate) = 7)
SET @currentdate = DATEADD(d, 1, @currentdate)
IF (DATEPART(dw, @currentdate) = 6)
SET @currentdate = DATEADD(d, 2, @currentdate)
IF (DATEPART(dw, @currentdate) <= 5)
BEGIN
SET @currentdate = DATEADD(d, 1, @currentdate)
SET @intdays = @intdays + 1
END
END
END
set @shour=0
if @intdays -1 =0
begin
set @shour=datediff(hour,@startdate,@enddate)
end
if @intdays -1 =1
begin
set @shour = datediff(hour,@startdate,convert(nvarchar(10),@startdate,120) + ' ' + '17:00:00') + datediff(hour, convert(nvarchar(10),@enddate,120) + ' ' +'08:00:00',@enddate)
end
if @intdays -1 >1
begin
set @shour = (@intdays-2)*8 + datediff(hour,@startdate,convert(nvarchar(10),@startdate,120) + ' ' + '17:00:00') + datediff(hour, convert(nvarchar(10),@enddate,120) + ' ' +'08:00:00',@enddate)
end
RETURN (@shour)
END
调用
select dbo.fun_CalculateWorkdays('2022-04-08 10:00:00','2022-04-13 15:00:00')
【无标题】SQL server 计算工作日(排除双休日)相关推荐
- 无废话-SQL Server 2005新功能(1) - TSQL
无废话-SQL Server 2005新功能(1) - TSQL SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的. 举几个例子来简单说明 这些例子我引用 ...
- SQL Server内存故障排除
翻译自:https://blogs.msdn.microsoft.com/karthick_pk/2012/06/15/troubleshooting-sql-server-memory/ SQL S ...
- SQL Server计算一年中的第几周
一.计算一年中的第几天DATENAME(dp,d) DATENAME(dp,d)函数根据dp指定返回日期中相应部分的值,dp可以取值为:quarter,dayofyear,day,week,weekd ...
- java 计算工作日排除法定假日以及周末,增加指定工作日
/*** <p>Title: main </P>* <p>Description: TODO </P>* @param args* return voi ...
- sql server计算日期到当前日期天数_Excel如何统计连续停机天数问题
前几天有个朋友问了一个关于连续时间统计的问题,使用Power Query for Excel来解决的.今天在张俊红老师的公众号上看到了使用使用SQL来解决连续时间的统计问题.这个问题是一个非常经典的例 ...
- SQL server 计算当前日期为一年中的第几周,以周五/周一作为一周中的第一天
这个问题对于小白的我来说,当时找了好久才解决,所以在这里记录一下. 要计算当前日期为一年中的第几周,以周五作为一周中的第一天 首先设置每周的起始天为周五(因为默认是从周天开始的) SET DATEFI ...
- sql server 计算2个日期相差的 天数,月数,年数,日期运算/计算
--天数 select datediff(day,'2004-09-01','2004-09-02') --年数 select datediff(month,'2004-09-01','2004-10 ...
- SQL Server计算汉字笔画部首
/* 有一个成语表,请计算 1)每个字笔画数都相同的成语 2)每个字都含有偏旁三点水或火字旁的成语 */--创建汉字词典 CREATE TABLE myHanzi (id INT NOT NULL,z ...
- sql server 计算两个时间 相差的 几天几时几分几秒
CAST ( CAST ( DATEDIFF ( ss, StartTime, ConcludeTime ) / ( 60 * 60 * 24 ) AS INT ) AS VARCHAR ) + '天 ...
最新文章
- 开发日记-20190621 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- JavaScript中innerHTML与innerText,createTextNode的区别
- 我如何一分钱没花学完AI课程,入职新浪算法工程师
- Hyper-v Server QA
- c语言中switch的用法是什么?
- 数字图像处理-0.绪论
- 第十六章:springboot 整合logback日志
- 股价/期货等时间序列数据的整合检验、Grach建模
- CSS display 常用属性小结
- win10 安装sqlserver2000
- Python爬取淘宝销量数据!这年头数据就是钱啊!
- 【Ydui.js】------ ydui.js 中的 util 中的方法讲解如何调用使用 例如:获取地址栏信息,js 倒计时,cookie, 获取图片地址等
- 【SPSS】SPSS学习笔记
- 想学python网课哪个好过_求问一下jrs们,零基础学python哪个网课好?
- RV1126 OTG 功能
- overflow:auto自动滚动到底部(vue)
- 阻抗匹配50欧姆的由来
- 大数据最佳实践-flink
- Corsiniの时光漏
- 【Unity3D脚本】Transform类