我有一個問題,我需要使用SQL來解決。問題是我必須計算工作時間之間的日期,工作時間以外的工作時間以及週末的工作時間。工作時間在0800至1600年之間。某種功能應該可以做到這一點,但我無法圍繞如何包裹我的頭。誰能幫我?計算兩個日期之間的秒數和分類
實施例的數據(SQL Server 2008 R2的SP2):
Opendate裏:2014-10-01 10:33:57.767 Closedate:2014年10月9日10:33:52.733
我有一個問題,我需要使用SQL來解決。問題是我必須計算工作時間之間的日期,工作時間以外的工作時間以及週末的工作時間。工作時間在0800至1600年之間。某種功能應該可以做到這一點,但我無法圍繞如何包裹我的頭。誰能幫我?計算兩個日期之間的秒數和分類
實施例的數據(SQL Server 2008 R2的SP2):
Opendate裏:2014-10-01 10:33:57.767 Closedate:2014年10月9日10:33:52.733
我使用這些函數返回兩個日期之間的非週末秒:
CREATE FUNCTION [dbo].[DateDiff_NoWeekends](
@date1 DATETIME,
@date2 DATETIME
)
RETURNS INT AS BEGIN
DECLARE @retValue INT
SET @date1 = dbo.__CorrectDate(@date1, 1)
SET @date2 = dbo.__CorrectDate(@date2, 0)
IF (@date1 >= @date2)
SET @retValue = 0
ELSE BEGIN
DECLARE @days INT, @weekday INT
SET @days = DATEDIFF(d, @date1, @date2)
SET @weekday = DATEPART(dw, @date1) - 1
SET @retValue = DATEDIFF(s, @date1, @date2) - 2 * 24 * 3600 * ((@days + @weekday)/7)
END
RETURN @retValue
END
GO
CREATE FUNCTION [dbo].[__CorrectDate](
@date DATETIME,
@forward INT
)
RETURNS DATETIME AS BEGIN
IF (DATEPART(dw, @date) > 5) BEGIN
IF (@forward = 1) BEGIN
SET @date = @date + (8 - DATEPART(dw, @date))
SET @date = DateAdd(Hour, (8 - DatePart(Hour, @date)), @date)
END ELSE BEGIN
SET @date = @date - (DATEPART(dw, @date)- 5)
SET @date = DateAdd(Hour, (18 - DatePart(Hour, @date)), @date)
END
SET @date = DateAdd(Minute, -DatePart(Minute, @date), @date)
SET @date = DateAdd(Second, -DatePart(Second, @date), @date)
END
RETURN @date
END
這將有助於上手也找到了其他任務的解決方案。
這裏是您的樣本數據的sql-fiddle demo:
SELECT [weekday-seconds between] =
(dbo.DateDiff_NoWeekends('2014-10-01 10:33:57.767','2014-10-09 10:33:52.733'))
=> 518395
嗨,謝謝你的回覆。你如何將工作時間納入這個? – 2014-10-09 10:50:32
@AndréBondevik:我還沒有時間進一步調查。但我想你可以使用類似的方法。你需要一個標準化開始和結束日期的標準。除此之外,您可以通過'SELECT DATEDIFF(s,'2014-10-09 08:00:00','2014-10-09 16:00:00')'(28800)計算秒數,並將其乘以與[兩天之間的工作日數](http://stackoverflow.com/questions/252519/count-work-days-between-two-dates)。 – 2014-10-09 11:09:07
可以打開和closedate跨越多個週末的時期? – pancho018 2014-10-09 09:40:10
是的,它可以。對跨度沒有限制。查看我的工作時間更新。 – 2014-10-09 10:51:51
可能重複[計算兩個日期之間的時間差(僅工作小時數)(分鐘)](http://stackoverflow.com/questions/3296923/calculate-time-difference-only-working-hours-in-minutes-between-兩個日期) – pancho018 2014-10-10 12:19:03