兩個日期時間列之間的區別我有兩列(創建和ResolutionDate)與日期時間的表值 如何獲得SQL
我需要創建的列和resolutiondate之間的差異來獲得從創建日期開始需要花費的天數。
而且我也只需要與工作日內或網絡天即週一至週五(不是週末和節假日)來獲得結果。
例如,如果我創建了:2015-09-22和resolutiondate:2015-09-30,那麼結果應該是6天,因爲兩天是星期六,星期日是我選擇的創建日期和分辨率日期之間。
請讓我知道我可以工作了與SQL。
兩個日期時間列之間的區別我有兩列(創建和ResolutionDate)與日期時間的表值 如何獲得SQL
我需要創建的列和resolutiondate之間的差異來獲得從創建日期開始需要花費的天數。
而且我也只需要與工作日內或網絡天即週一至週五(不是週末和節假日)來獲得結果。
例如,如果我創建了:2015-09-22和resolutiondate:2015-09-30,那麼結果應該是6天,因爲兩天是星期六,星期日是我選擇的創建日期和分辨率日期之間。
請讓我知道我可以工作了與SQL。
爲計算工作日內兩個日期之間的區別,你可以使用下面的函數。請注意,這隻會在沒有周末的情況下計算,如果您有中間的假期,它會將其計算爲平日。
public double GetBusinessDays(DateTime startD, DateTime endD)
{
double calcBusinessDays = 1 + ((endD - startD).TotalDays * 5 - (startD.DayOfWeek - endD.DayOfWeek) * 2)/7;
if ((int)endD.DayOfWeek == 6) calcBusinessDays--;
if ((int)startD.DayOfWeek == 0) calcBusinessDays--;
return calcBusinessDays;
}
也許這樣的事情...跨應用部分可能是一個UDF
Declare @YourTable table (ID int,Created datetime, ResolutionDate datetime)
Insert Into @YourTable values
(1,'2015-09-22 13:35:38','2015-09-30 17:37:09'),
(2,'2016-02-28 12:55:22','2016-02-29 12:55:44'),
(3,'2015-09-22 13:30:31','2015-09-30 17:37:09')
Select A.*
,B.WorkingDays
From @YourTable A
Cross Apply (
Select WorkingDays=count(*)
From (Select Top (DateDiff(DD,A.Created,A.ResolutionDate)+1) D=DateAdd(DD,Row_Number() over (Order By (Select NULL))-1,cast(cast(A.Created as date) as datetime)) From master..spt_values N1) D
Where D >= A.Created and D<= A.ResolutionDate
and DatePart(DW,D) not in (7,1)
and Cast(D as Date) Not In (Select Date From (Values
('2016-01-01','New Year''s Day'),
('2016-01-18','Martin Luther King, Jr,'),
('2016-02-15','Washington''s Birthday'),
('2016-03-25','Good Friday'),
('2016-05-30','Memorial Day'),
('2016-07-04','Independence Day'),
('2016-09-05','Labor Day'),
('2016-11-24','Thanksgiving'),
('2016-11-25','Black Friday'),
('2016-12-26','Christmas Day')
) as H (Date,Name))
) B
返回
ID Created ResolutionDate WorkingDays
1 2015-09-22 13:35:38.000 2015-09-30 17:37:09.000 6
2 2016-02-28 12:55:22.000 2016-02-29 12:55:44.000 1
3 2015-09-22 13:30:31.000 2015-09-30 17:37:09.000 6
如果您需要公司日期則與所有公司的工作表天
select ticket.ID, count(companyWorkDay.dt)
from ticket
left join companyWorkDay
on companyWorkDay.dt between ticket.created and ticket.resolution
group by ticket.ID
For填充表,一旦你得到了很多更容易查詢
你可以編寫一個查詢進入平日裏,然後就刪除公司假期
你有沒有考慮節假日以及帶來的麻煩? –
是的,我需要考慮的假期太@vkp – user7463647
我想你會需要一個自定義的表來考慮公司的假期。 – Paparazzi