SQL计算时间差并排除周末
SQL计算时间差并排除周末
CREATE FUNCTION DI_FN_GET_WorkDay
(@begin DATETIME , @end DATETIME )
RETURNS int
BEGIN
DECLARE @i INT , @j INT SET @i = 0 SET @j = 0
IF @end > @begin
BEGIN
WHILE DATEDIFF(d, DATEADD(d, @i, @begin), @end) <> 0
BEGIN IF DATEPART(weekday, DATEADD(d, @i, @begin)) NOT IN ( 1, 7 )
SET @j = @j + 1
SET @i = @i + 1
END
END
SELECT @j = ( @j + 1 ) * 24 * 60 - DATEDIFF(Minute, CAST(CONVERT(VARCHAR(10), @begin, 120) AS DATETIME), @begin)
- DATEDIFF(Minute, @end, CAST(CONVERT(VARCHAR(10), @end + 1, 120) AS DATETIME))
RETURN @j END
sql 计算结束时间 去除周六周末,
SQL里dateadd计算日期时跳过周六周日两天计算日期
-- 自定义dateadd函数,跳过周六周日.
create function [dbo].[dateadd2]
(@date0 datetime,
@x int)
returns datetime
as
begin
declare @i int,@date1 datetime
select @i=1,@date1=@date0 while(@i<=@x)
begin
select @date1=dateadd(d,1,@date1) if datepart(dw,@date1) not in(1,7)
begin
select @i=@i+1
end
end return @date1
end
-- 测试1
select dateadd(D,7,'2015-04-01') 'dateadd',dbo.dateadd2('2015-04-01',7) 'dateadd2'
/*
dateadd dateadd2
----------------------- -----------------------
2015-04-08 00:00:00.000 2015-04-10 00:00:00.000 (1 row(s) affected)
*/ -- 测试2
select dateadd(D,14,'2015-04-01') 'dateadd',dbo.dateadd2('2015-04-01',14) 'dateadd2'
/*
dateadd dateadd2
----------------------- -----------------------
2015-04-15 00:00:00.000 2015-04-21 00:00:00.000 (1 row(s) affected)
*/
输入开始时间和工作天数,计算结束时间,需考虑节假日周末和调休
<!-- 限制输入周六周末【disabledDays:[0,6]】 且 只能输入今天及今天以后【minDate:'%y-%M-{%d}'】 -->
<input id="beginTime" class="Wdate" type="text" onFocus="WdatePicker({minDate:'%y-%M-{%d}'})" >
<br><br>
<input type='text' id="d" onblur="endTime(this.value)"/>
<br><br>
<input type='text' id="endTime" type="text" readonly/>
<script type="text/javascript">
function endTime(day){
//开始时间
var beginTime = document.getElementById("beginTime").value;
document.getElementById("endTime").value = getWorkDayCount(beginTime,day);
}
//法定节假日和调休日的设定
var Holiday = ["2017-10-1", "2017-10-2", "2017-10-3","2017-10-4","2017-10-5", "2017-10-6", "2017-10-7", "2017-10-8"];
//虽然是周末但是还是要上班的【调休】
var WeekendsOff = ["2017-9-30"];
//“2017-10-09”+12
function addDate(dateTemp,days){
var dateTemp = dateTemp.split("-");
var nDate = new Date(dateTemp[1] + '-' + dateTemp[2] + '-' + dateTemp[0]); //转换为MM-DD-YYYY格式
var millSeconds = Math.abs(nDate) + (days * 24 * 60 * 60 * 1000);
var rDate = new Date(millSeconds);
var year = rDate.getFullYear();
var month = rDate.getMonth() + 1;
if (month.length==1) month = "0" + month;
var date = rDate.getDate();
if (date.length==1) date = "0" + date;
return (year + "-" + month + "-" + date);
}
function getWorkDayCount (beginDate, workDay) {
/*
功能:计算一段时间内工作的天数。不包括周末和法定节假日,法定调休日为工作日,周末为周六、周日两天;
参数:
beginDate -时间段开始日期;
workDay -工作时间;
*/
var begin = beginDate;
var count = 0;
for(var i = 0;i<365;i++){
beginDate = addDate(begin,i);
var arys1= new Array();
arys1=beginDate.split('-'); //日期为输入日期,格式为 2013-3-10
var ssdate=new Date(arys1[0],parseInt(arys1[1]-1),arys1[2]);
var day = ssdate.getDay();
//1、判断输入的开始时间是不是周末
if(day==6 || day==0){
//是周末 不是调休 是节假日
if(WeekendsOff.toString().indexOf(beginDate)==-1){
continue;
}else{
count++;
}
}else{
if(Holiday.toString().indexOf(beginDate)!=-1){
continue;
}else{
count++;
}
}
if(count==workDay) break;
};
//结束时间
return beginDate;
};
</script>
SQL计算时间差并排除周末的更多相关文章
- SQL计算时间差,要精确到小时分钟秒
declare @starttime as datetime declare @endtime as datetime set @starttime = '2009-11-24 15:10:00' s ...
- 用 SQL 计算时间差值
;WITH res1 AS ( SELECT * FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY F2 ORDER BY F1) AS rn,F1,F2 F ...
- SQL Server DATEDIFF() 函数(SQL计算时间差)
select * from task_list where 1=1 and datediff(dd,carateTime,getdate()) =0 定义和用法 DATED ...
- DB2--sql计算时间差和格式化时间
格式化时间 db2 格式化时间使用的 TO_CHAR(TIMESTAMP('2017-10-24 21:18:12'),'YYYY-MM-DD'): 测试sql:SELECT TO_CHAR(TIME ...
- 使用SQL计算宝宝每次吃奶的时间间隔
需求:媳妇儿最近担心宝宝的吃奶时间不够规律,网上说是正常平均3小时喂奶一次,让我记录下每次的吃奶时间,分析下实际是否偏差很大,好在下次去医院复查时反馈给医生. 此外,还要注意有时候哭闹要吃奶,而实际只 ...
- SQL 计算列
SQL计算列,可以解决一般标量计算(数学计算,如ColumnA*ColumnB)的问题,而子查询计算(如select sum(salary) from tableOther where id=’ABC ...
- Android计算时间差
想要写个根据消耗时长来确定开始结束时间的小工具,发现Android处理时间上有点累,可能是我没找到合适的方法吧,先把我的解决办法贴出来,有好的解决方法还希望提醒一下: 1.根据时间字符串获取毫秒数 p ...
- 【转载】c/c++在windows下获取时间和计算时间差的几种方法总结
一.标准C和C++都可用 1.获取时间用time_t time( time_t * timer ),计算时间差使用double difftime( time_t timer1, time_t time ...
- C#计算时间差值
/// <summary> /// 计算时间差值 /// </summary> /// <param name="DateTime1">< ...
随机推荐
- (转)IE=EmulateIE7 标签的作用
本文转载自:http://www.cnblogs.com/0000/archive/2009/11/01/1593851.html 对于 Web 开发人员来说,文本兼容性是一个要考虑的重要问题.Win ...
- 【转】java接口的性能测试
这周尝试了一把性能测试,之前都是测试网站的性能测试,java接口的性能测试还是头一次,学到了很多,特此分享一下. 主要用到了两个性能测试工具,一个是jmeter,一个是LoadRunner. 使用jm ...
- cp -f 还是提示是否覆盖
新做了服务器,cp覆盖时,无论加什么参数-f之类的还是提示是否覆盖,这在大量cp覆盖操作的时候是不能忍受的. 把a目录下的文件复制到b目录 以下是代码片段: cp –r a/* b 执行上面的命令时, ...
- EasyUI treegrid 加载checked
EasyUI treegrid 加载checked $(function () { $('#tbDictContTree').treegrid({ title: '数据字典目录管理', iconCl ...
- __CLASS__
<?php class base_class { function say_a() { echo "'a' - said the " . __CLASS__ . " ...
- python学习(十四) 网络编程
14.1 少数几个网络设计模块 14.1.1 socket模块 套接字包括:服务器套接字和客户机套接字. 在创建一个服务器套架字后,让它等待连接,这样它就在摸个网络地址处(IP地址和一个端口号的组合) ...
- usb设备驱动程序
韦老师写的,供参考 /* * drivers\hid\usbhid\usbmouse.c */ #include <linux/kernel.h> #include <linux ...
- 第一次调用Web service响应速度慢的解决办法
Env: Client: WinForm(Net Framework 2.0) Server:Web Service(Net Framework 4.0) Problem: Client use pr ...
- xml和configparser模块
一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, 但至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过 ...
- 数据库与vs的连接
新建一个MFC基于对话框的项目后,更改属性, 其中需要将include(里面都是MySQL的头文件)lib是库文件,将.dll放入与.exe同级目录下,或放入系统里(c:\windows\system ...