SQL Server函式與儲存過程 計算時間

2022-07-19 00:51:14 字數 3231 閱讀 1745

一、通過乙個開始時間、結束時間計算出乙個工作日天數(不包含工作日與節假日),節假日在 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

print

@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...