jak zrozumiałem z pytaniem, co potrzebne jest jak postępować
- Dałeś data rozpoczęcia i liczba minut dodaje się do niego, a następnie trzeba uzyskać termin
- Do uzyskać termin, trzeba wykluczyć świąt i termin powinien być w ciągu dnia roboczego
tutaj jest to, co można zrobić
declare @start datetime,
@min int,
@days int
set @start= '28 Dec 2014'
set @min = 2200
-- get the number of days
set @days=datediff(day,@start,dateadd(minute,@min,@start))
-- get the due date
select max(Date)
from
(select row_number() over(order by t.Id)-1 as Id,t.Date
from DateMetadata t
inner join BusinessDays b on Day(t.Date) = b.Day
where t.Date > = @start and not exists(select 1 from Holidays h
where h.Day=Day(t.Date)
and h.Month=Month(t.Date))) as p
where p.Id < @days
Uwaga: że tabela DateMetadata będziesz setup to w bazie danych raz
konfiguracja dla powyższego kodu:
create table Holidays(Id int identity(1,1),
Name nvarchar(50),
Day int,
Month int)
create table BusinessDays(Id int identity(1,1),
Name nvarchar(20),
Day int)
-- i am putting some days that are known,
-- it depends on you to define which holidays you want
insert into Holidays (Name,Day,Month) values('Christmas',25,12)
insert into Holidays(Name,Day,Month) values('New Year',31,12)
insert into Holidays(Name,Day,Month) values('Valentine',14,2)
insert into Holidays(Name,Day,Month) values('Mothers day',21,3)
insert into Holidays(Name,Day,Month) values('April fools day',1,4)
-- i am assuming that the business days are from monday till friday and
-- saturday and sunday are off days
insert into BusinessDays(Name,Day) values ('Monday',1)
insert into BusinessDays(Name,Day) values('Tuesday',2)
insert into BusinessDays(Name,Day) values('Wednesday',3)
insert into BusinessDays(Name,Day) values('Thursday',4)
insert into BusinessDays(Name,Day) values('Friday',5)
tabela ta jest potrzebna i będziesz setup raz
-- set up a table that contains all dates from now till 2050 for example
-- and you can change the value of 2050 depending on your needs
-- this table you will setup it once
create table DateMetadata(Id int identity(1,1),
Date datetime)
declare @date datetime
set @date='01 Jan 2014'
while @date < '31 Dec 2050'
begin
insert into DateMetadata(Date) values(@date)
set @date = @date + 1
end
tutaj działa DEMO
jeśli potrzebujesz żadnych wyjaśnień, jestem gotowy
nadzieję, że to pomoże
trzeba dać przykład pewnych nakładów i spodziewanych wyników, jeśli masz nadzieję na uzyskanie odpowiedzi, który działa. Musisz również odpowiedzieć na kilka pytań, takich jak: czy godziny pracy są takie same dla każdego dnia roboczego? I jakie są Twoje święta? Ale myślę, że możesz to zrobić bez pętli lub tabeli dat i godzin pracy. –
można wspomnieć próbkę, i tak można to zrobić bez pętli, po prostu chcą próbkę w inny napisać kod jak chcesz – Monah
To wygląda możliwym duplikat: https://stackoverflow.com/ pytania/1044688/add-business-days-and-getbusinessdays – panpernicek