当前位置:首页 » 编程语言 » sql计算两个日期工作日
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql计算两个日期工作日

发布时间: 2022-05-17 18:22:20

‘壹’ sql如何计算两个日期间的工作日,剔除节假日

select count(distinct day) from tb
where day between day1 and day2 --找出两天内的日子
and weekday(day)<5 --5代表周六,6代表周日,剔除掉

‘贰’ SQL 数据库如何计算两个日期的简隔时间,以下图为例!

select datediff(day,‘2010-12-1’,‘2010-12-3’)
返回的结果是 2
当然你也可以从表中选择出来的两个的字段,
SELECT datediff(day,date1,date2) FROM date_db.date_table
返回的是 date2-date1 之间的天数
上面是计算的是在数据库date_db中表date_table中时间时段date1与date2之间的相隔天数

‘叁’ sql中该如何算成俩个时间之间的天数

解决方案:

使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后使用DAYS 函数从一个HIREDATE中减去另一个HIREDATE:

  1. select days(ward_hd) - days(allen_hd)

  2. from (

  3. select hiredate as ward_hd

  4. from emp

  5. where ename = 'WARD'

    ) x,

  6. select hiredate as allen_hd

  7. from emp

  8. where ename = 'ALLEN'

  9. ) y

Oracle和PostgreSQL

使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后从一个日期中减去另一个日期:

  1. select ward_hd - allen_hd

  2. from (

  3. select hiredate as ward_hd

  4. from emp

  5. where ename = 'WARD'

  6. ) x,

  7. (

  8. select hiredate as allen_hd

  9. from emp

  10. where ename = 'ALLEN'

  11. ) y

‘肆’ sql 怎么计算两个时间的天数

select datediff(part,StartDate,EndDate)
part:日期的哪一部分计算差额的参数
StartDate:开始时间
EndDate:截至时间
如:select datediff(dd,'2010-09-20','2010-09-21')
结果:1
即两个日期相差1天;
select datediff(mm,'2010-09-20','2010-09-21')
结果:0
即两个日期都是同月。

‘伍’ SQL语句如何统计a时间和b时间有多少个工作日

首先保证,a 与 b 表的时间是 date 或者 datetime 类型:
1、Oracle 写法:

select sum (case when to_char(a.time,'d')-1>=1 and to_char(a.time,'d')-1<=5 then 1
else 0
end)
from tablename a;
2.MSSQL 和 Sybase 写法:

select sum(case when datepart(weekday,a.datetime)-1 >=1 and datepart(weekday,a.datetime)-1<=5 then 1
else 0
end)
from tablename a

‘陆’ 求教如何利用MySQL语句计算两个日期中工作日的天数(除去周六日的天数)

DATEDIF(start_date,end_date,unit)
Start_date 为一个日期,它代表时间段内的第一个日期或起始日期。
End_date 为一个日期,它代表时间段内的最后一个日期或结束日期。
Unit 为所需信息的返回类型。
Unit 返回
注:结束日期必须大于起始日期
"Y" 时间段中的整年数。
"M" 时间段中的整月数。
"D" 时间段中的天数。
"MD" start_date 与 end_date 日期中天数的差。忽略日期中的月和年。
"YM" start_date 与 end_date 日期中月数的差。忽略日期中的年。
"YD" start_date 与 end_date 日期中天数的差。忽略日期中的年。

‘柒’ Excel中怎么样计算两个日期之间的工作日天数

计算两个日期之间的工作日天数的方法:
1、使用NETWORKDAYS函数来计算工作日的数量
在空白单元格中,请输入此公式=
NETWORKDAYS(B1,B2)(B1代表开始日期和B2表示结束日期)然后键入输入键,您将计算两个日期之间的周日和周六的工作日数量。
如图:
注意:
有时候,这两天可能会有一些假期,如果你想计算这两天之间的工作日,你应该排除星期六,星期天和假日。
这个NETWORKDAYS功能也可以帮助你。
该语法NETWORKDAYS功能是:=
NETWORKDAYS(开始日期,结束日期,假期)
将假期日期输入到要从日期中减去的单元格中,然后输入此公式=
NETWORKDAYS(B1,B2,B3:E3)(B1表示开始日期,B2代表结束日期和B3:E3是假期列表),然后按输入键,计算了不包括周日,周六和节假日的工作日数。
2、使用SUM和INT函数来计算工作日的数量
除NETWORKDAYS函数外,还有另一个公式可以帮助您获取两个日期之间的工作日数量。
在空白单元格中输入此公式=SUM(INT((WEEKDAY(B1-{2,3,4,5,6})+B2-B1)/7)),然后点击输入关键,并且所有的工作日将被计算。
看截图:
备注:
1、有时候,你每星期有6个工作日(从星期一到星期六),所以你需要计算包括周六在内的工作日的数量,但不包括周日。
在这种情况下,您可以应用此公式=SUM(INT((WEEKDAY(B1-{2,3,4,5,6,7})+B2-B1)/7)).
2、在上面的公式中,B1代表开始日期和B2表示结束日期。
两个日期之间的全部天数:
1、假设开始日期为11
/
21
/
2016,结束日期为3
/
18
/
2017,然后计算这期间的天数,如图。
2、在空白单元格中,请输入此公式=
B2-B1,然后按输入键,你会得到两个日期之间的天数。
看截图:
注意:在上面的公式中,B2吸引最终数据,并且B1indacates的开始日期。
您可以根据需要更换它们。
计算两个日期之间的周末天数
这里也有一些公式来计算给定期间内的周末天数(周六和周日)。
键入此公式=SUM(INT((WEEKDAY(B1-{1,7})+B2-B1)/7))(B1表示开始日期,B2代表结束日期)放入空白单元格中,然后按输入关键,现在你会得到这两个日期之间的周末。
看截图:
注意:另一个公式来介绍您计算给定两个日期的周末。
请申请这个=
SUMPRODUCT(
-
(WEEKDAY(ROW(INDIRECT(B1&
“:”
&B2)),2)>
5))(B1表示开始日期和B2代表结束日期)。

‘捌’ 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

‘玖’ SQL中怎么计算两日期之间的天数

按小时统计,符合条件的为一天

小时数=select datediff(hh,'2007-10-12 9:00:00','2007-10-12 18:00:00')

‘拾’ sql:当前日期是本月第几个工作日

create table #Holiday(dateday datetime)

insert into #Holiday values('2016-08-03 15:10:23');
insert into #Holiday values('2016-08-05 15:10:23');
insert into #Holiday values('2016-08-11 15:10:23');
insert into #Holiday values('2016-08-15 15:10:23');

SET DATEFIRST 1

DECLARE @CAL DATETIME --需要计算的日期
SET @CAL ='2016-08-07 15:12:41'

;WITH CTE
AS (
SELECT RW=ROW_NUMBER()OVER(ORDER BY name)
FROM [Master].dbo.spt_values --找一个系统表(记录数超过31的表)
)
,CTE2
AS (
SELECT RW,DT=DATEADD(DAY,RW-DAY(@CAL),@CAL)
FROM CTE
WHERE RW <=DAY(@CAL)
)
,CTE3
AS (
SELECT A.RW,A.DT
,IsHoliday =Case When DATEPART(weekday ,DT) IN(6,7) OR B.dateday is not null THEN 1 ELSE 0 END
FROM CTE2 A
LEFT JOIN #Holiday B ON CONVERT(NVARCHAR(10),A.DT,121) =CONVERT(NVARCHAR(10),B.dateday,121)
)
SELECT Count(1) FROM CTE3
WHERE IsHoliday =0