Reputation: 51
I have two columns containing time in format of HH:MM
. for example column1 having value 149:10 and column2 having 110:20.
I want to add the both columns and I want output result in format of HH:MM
Upvotes: 2
Views: 133
Reputation: 81930
Just another option
Declare @YourTable table (column1 varchar(25),column2 varchar(25))
Insert Into @YourTable values
('149:10','110:20')
Select A.*
,TotalTime = Format(B.Sec/3600 ,'0' )
+Format(B.Sec%3600/60,':00')
From @YourTable A
Cross Apply (values (
(3600*parsename(replace(column1,':','.'),2)+60*parsename(replace(column1,':','.'),1))
+(3600*parsename(replace(column2,':','.'),2)+60*parsename(replace(column2,':','.'),1))
)
) B (sec)
Returns
column1 column2 TotalTime
149:10 110:20 259:30
Upvotes: 0
Reputation: 13237
Since the given values are not able to store into the TIME
datatype, it will throw error as below:
DECLARE @TimeStamp1 AS TIME = '149:10'; SELECT @TimeStamp1;
So your inputs might be varchar
.
I tried an approach with the given same data:
DECLARE @TimeStamp1 AS VARCHAR(20) = '149:40';
DECLARE @TimeStamp2 AS VARCHAR(20) = '110:40';
SELECT CAST(
CAST(PARSENAME(REPLACE(@TimeStamp1, ':', '.'), 2) AS INT) +
CAST(PARSENAME(REPLACE(@TimeStamp2, ':', '.'), 2) AS INT) +
((CAST(PARSENAME(REPLACE(@TimeStamp1, ':', '.'), 1) AS INT) + CAST(PARSENAME(REPLACE(@TimeStamp2, ':', '.'), 1) AS INT)) / 60) AS VARCHAR (20))
+ ':' +
CAST((
(CAST(PARSENAME(REPLACE(@TimeStamp1, ':', '.'), 1) AS INT) +
CAST(PARSENAME(REPLACE(@TimeStamp2, ':', '.'), 1) AS INT)) % 60) AS VARCHAR (20)) AS Result;
Result
--------
260:20
Upvotes: 1
Reputation: 17126
the following query should work
declare @s1 varchar(max), @s2 varchar(max)
select @s1='149:50',@s2='110:50'
SELECT
CAST(
CAST(LEFT(@s1,CHARINDEX(':',@s1)-1) AS INT) +
CAST(LEFT(@s2,CHARINDEX(':',@s2)-1) AS INT) +
(CAST(RIGHT(@s1,LEN(@s1)-CHARINDEX(':',@s1)) AS INT) + CAST(RIGHT(@s2,LEN(@s2)-CHARINDEX(':',@s2)) AS INT))/60
as nvarchar)
+':'+
CAST(
(CAST(RIGHT(@s1,LEN(@s1)-CHARINDEX(':',@s1)) AS INT) +
CAST(RIGHT(@s2,LEN(@s2)-CHARINDEX(':',@s2)) AS INT))
%60
AS nvarchar)
Upvotes: 0