一、通過乙個開始時間、結束時間計算出乙個工作日天數(不包含工作日與節假日),節假日在 holidays 表中維護;
1、函式
--建立函式,引數 @bengrq 開始時間,@endrq 結束時間
create
function
[dbo
].[f_jsgzr
](@bengrq date,@endrq
date)
--返回值型別 天數
returns
intbegin
--計算出開始時間與結束時間的相差的天數,通過這個天數減去查詢出來的節假日與休息日天數
--@jats 節假日,@gzrts 總天數,@gzrts 返回值 工作日天數
declare
@jats
int,@zts
int,@gzrts
int--
資料庫中存在一張記錄節假日與休息日的表,通過這張表合計兩個時間段中包含的節假日天數
select
@jats
=count(1
) from holidays rq where rq.hldys >=
@bengrq
and rq.hldys <=
@endrq
select
@zts
=datediff(day,@bengrq,@endrq
) --
計算工作日 = 總天數 - 假節日天數
select
@gzrts
=@zts
-@jats
--返回工作日天數
return
@gzrts
end--
執行函式,輸入引數
select
[dbo
].[f_jjr
] ('
2019-02-11
','2019-02-18')
go
2、儲存過程
/*建立儲存過程 計算工作日*/
create
procedure
jjr
--引數 @bengrq 開始時間,@endrq 結束時間、@gzrts 工作日天數
@bengrq date,@endrq date,@gzrts
int output as
begin
--計算出開始時間與結束時間的相差的天數,通過這個天數減去查詢出來的節假日與休息日天數
declare
@jats
int,@zts
int--
資料庫中存在一張記錄節假日與休息日的表,通過這張表合計兩個時間段中包含的節假日天數
select
@jats
=count(1
) from holidays rq where rq.hldys >=
@bengrq
and rq.hldys <=
@endrq
select
@zts
=datediff(day,@bengrq,@endrq
) --
計算工作日 = 總天數 - 假節日天數
select
@gzrts
=@zts
-@jats
@gzrts
--返回天數
return
@gzrts
end--
宣告變數
declare
@bengrq date,@endrq date,@gzrts
int--
給變數賦值
select
@bengrq='
2019-02-01
',@endrq='
2019-03-01'--
呼叫儲存過程
exec jjr @bengrq,@endrq,@gzrts output
二、通過乙個開始時間、天數計算出乙個結束時間(不包含工作日與節假日);
使用迴圈來實現;
/*建立函式通過工作日天數,獲取結束時間*/
--@bengrq 開始時間,@gzrts 工作日天數
create
function dbo.f_jsjsrq(@bengrq date,@gzrts
int)
--返回值型別 結束時間
returns
date
begin
--@jats 節假日,@adddate 返回值 結束日
declare
@jats
int,@endrq
date
--為 @endrq 結束時間賦值,從 @bengrq 開始時間的第二天開始
select
@endrq
=@bengrq
--工作日天數大於0時迴圈查詢節假日表資料
while
@gzrts
>=
0begin
--每次查詢時 @jats 節假日等於0
select
@jats=0
select
@jats
=count(1) from holidays rq where rq.hldys =
@endrq
if@jats
>
0begin
select
@endrq
=dateadd(day,1,@endrq
)
endelse
begin
--@endrq 當前日期不是節假日時工作日天數減1
select
@gzrts
=@gzrts-1
--當工作日天數小於0時跳出迴圈
if@gzrts
<
0begin
break
;
endselect
@endrq
=dateadd(day,1,@endrq
)
endend
--返回日期
return
@endrq
end--
執行函式,引數 開始時間、工作日天數
select dbo.f_jsjsrq ('
2019-02-01
',16)
SQL SERVER 匯入EXCEL的儲存過程
1.先在查詢分析器裡執行 exec sp configure show advanced options 1 reconfigure exec sp configure ad hoc distributed queries 1 reconfigure 2.儲存過程 alter procedure d...
SQL SERVER 匯入EXCEL的儲存過程
1.先在查詢分析器裡執行 exec sp configure show advanced options 1 reconfigure exec sp configure ad hoc distributed queries 1 reconfigure 2.儲存過程 alter procedure d...
SQL SERVER 匯入EXCEL的儲存過程
1.先在查詢分析器裡執行 exec sp configure show advanced options 1 reconfigure exec sp configure ad hoc distributed queries 1 reconfigure 2.儲存過程 alter procedure d...