A. 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
B. SQL是计算两个日期相差多少天数的函数
SQL是高级的非过程化编程语言,一般针对数据库进行操作。
定义:datediff(day/month/year,startdate,enddate)
日期函数:(要返回的天数/月数/年数,开始日期,结束日期)
具体形式:
select 1,2,datediff(day,1,2) 天数 from aa
C. 在SQL Server中用那句sql语句可以得出两天之间的天数
这是计算一个月第一天的SQL 脚本:
SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)
这里我是用周(wk)的时间间隔来计算哪一天是本周的星期一。
SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0)
一年的第一天
现在用年(yy)的时间间隔来显示这一年的第一天。
SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)
季度的第一天
SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0)
D. SQL中怎么计算两日期之间的天数
按小时统计,符合条件的为一天
小时数=select datediff(hh,'2007-10-12 9:00:00','2007-10-12 18:00:00')
E. SQL查询,并计算两字段日期差天数
datediff(day/month/year,startdate,enddate)
日期函数:(要返回的天数/月数/年数,开始日期,结束日期)
select 1,2,datediff(day,1,2) 天数 from aa
F. sql中该如何算成俩个时间之间的天数
解决方案:
使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后使用DAYS 函数从一个HIREDATE中减去另一个HIREDATE:
select days(ward_hd) - days(allen_hd)
from (
select hiredate as ward_hd
from emp
where ename = 'WARD'
) x,
select hiredate as allen_hd
from emp
where ename = 'ALLEN'
) y
Oracle和PostgreSQL
使用两个内联视图求WARD和ALLEN的HIREDATE(聘用日期)。然后从一个日期中减去另一个日期:
select ward_hd - allen_hd
from (
select hiredate as ward_hd
from emp
where ename = 'WARD'
) x,
(
select hiredate as allen_hd
from emp
where ename = 'ALLEN'
) y
G. 求:sql中解决一个表中所有两个日期之间所有天数的语句
--从开始日期到结束日期,每天一条记录,你的冯贺截止日期是2013/6/8吧,我的是mssql
CreateTableT
(
住院号varchar(10),
姓名varchar(10),
开始日期datetime,
结束日期datetime
)
insertintoTvalues('185316','杨浩','2013/1/10','2013/1/12')
insertintoTvalues('192405','张鑫','2013/3/3','2013/3/4')
insertintoTvalues('203385','冯贺','2013/6/3','2013/6/8')
--递归查询
WithTT
As
(
Select住院号,姓名,开始日期,结束日期,开始日期As日期fromT
unionall
Select住院号,姓名,开始日期,结束日期,dateadd(day,1,日期)FromTT
Wheredateadd(day,1,日期)<=结束日期
)
Select*FromTT
OrderBy住院号,日期
--这个也可以
Selectt.*,DATEADD(DD,number,开始日期)As日期
FromtCrossJoinmaster.dbo.spt_valuesb
WhereType='P'andDATEADD(DD,number,开始日期)<=结束日期
H. 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
即两个日期都是同月。
I. 我要将这两个表中的两个日期之间的间隔天数算出来,用sql语句怎么做,
这个 to_date('20020405','yyyymmdd') 要看你 appealdate是怎么存数据决定的格式 如果数据 是 20020405 就是yyyymmdd ,如果是2002-04-05 才是你写的那种 yyyy-mm-dd
我现在用的数据库不是oracle,所以不太清楚oracle有啥区别,你试试
另:这是我网络的答案,希望对你有用
两个日期间的天数
select floor(sysdate - to_date('20020405','yyyymmdd')) from al;