Hi @Sarath ,
Please refer below updated one:
Step 1 : create one function according to hours instead of days.
CREATE FUNCTION dbo.ufn_ADD_WORKING_DAYHOURS (
@DATETIME DATETIME,
@NHOUR INT)
RETURNS DATETIME
BEGIN
DECLARE @STARTDATE INT = 0
DECLARE @COUNT INT = 0
DECLARE @NEWDATE DATETIME = DATEADD(HOUR, 12, @DATETIME)
WHILE @COUNT*12 < @NHOUR
BEGIN
IF DATEPART(WEEKDAY, @NEWDATE) NOT IN (7, 1)
SET @COUNT = @COUNT+1;
SELECT @NEWDATE = DATEADD(HOUR, 12, @NEWDATE), @STARTDATE += 12;
END
RETURN DATEADD(HOUR, @STARTDATE, @DATETIME);
END
GO
Step 2: Call this function in the update statement.
DROP TABLE IF EXISTS MyTable
CREATE TABLE MyTable (
ID int,
StageNumber int,
StartTime VARCHAR(100),
TargetEndTime VARCHAR(100)
);
INSERT INTO MyTable VALUES
(101, 1, '11/12/2020 07:45 AM',NULL),
(101, 2, '11/13/2020 07:45 AM',NULL),
(101, 3, '11/12/2020 07:45 AM','11/19/2020 07:45 AM'),
(101, 4, '11/13/2020 07:45 AM',NULL),
(101, 5, '11/12/2020 07:45 AM',NULL),
(102, 1, '11/16/2020 07:45 AM',NULL),
(102, 2, '11/17/2020 07:45 AM',NULL),
(102, 3, NULL,NULL),
(102, 4, NULL,NULL),
(102, 5, NULL,NULL);
DECLARE @StageNumber TABLE (
StageNumber int,
NumberOfDays decimal(18,1)
);
INSERT INTO @StageNumber VALUES
(1, 2.5), (2, 8), (3, 5), (4, 7),(5, 0.5)
UPDATE A
SET TargetEndTime=FORMAT(dbo.ufn_ADD_WORKING_DAYHOURS( A.StartTime , B.NumberOfDays*24 ),'MM/dd/yyyy hh:mm tt')
FROM MyTable A
INNER JOIN @StageNumber B
ON A.StageNumber=B.StageNumber
WHERE TargetEndTime IS NULL AND StartTime IS NOT NULL
SELECT * FROM MyTable
Output:
ID StageNumber StartTime TargetEndTime
101 1 11/12/2020 07:45 AM 11/16/2020 07:45 PM
101 2 11/13/2020 07:45 AM 11/25/2020 07:45 AM
101 3 11/12/2020 07:45 AM 11/19/2020 07:45 AM
101 4 11/13/2020 07:45 AM 11/24/2020 07:45 AM
101 5 11/12/2020 07:45 AM 11/12/2020 07:45 PM
102 1 11/16/2020 07:45 AM 11/18/2020 07:45 PM
102 2 11/17/2020 07:45 AM 11/27/2020 07:45 AM
102 3 NULL NULL
102 4 NULL NULL
102 5 NULL NULL
Best regards
Melissa
If the answer is helpful, please click "Accept Answer" and upvote it.
Note: Please follow the steps in our documentation to enable e-mail notifications if you want to receive the related email notification for this thread.
Hot issues November--What can I do if my transaction log is full?
Hot issues November--How to convert Profiler trace into a SQL Server table