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;