USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Description: Function to convert inconsistent hh:mm:ss value to seconds
-- Syntax: SELECT dbo.FunctionConvertToSeconds('hh:mm:ss')
-- =============================================
ALTER FUNCTION [dbo].[FunctionConvertToSeconds]
(
@InputTime varchar(8)
)
RETURNS int
AS
BEGIN
DECLARE @SearchString varchar(1), @SearchStringPosition int, @SearchStringOccurrence int, @InputTimeHour int, @InputTimeMinute int, @InputTimeSecond int, @InputTimeLength int, @OutputSeconds int;
SET @SearchString = ':';
SET @InputTimeLength = LEN(@InputTime);
SET @SearchStringOccurrence = (LEN(@InputTime) - LEN(REPLACE(@InputTime, @SearchString, ''))) /LEN(@SearchString)
IF (@SearchStringOccurrence = 1)
BEGIN
IF (@InputTimeLength = 5)
BEGIN
SET @SearchStringPosition = CHARINDEX(@SearchString, @InputTime);
SET @InputTimeMinute = CAST(SUBSTRING(@InputTime, 0, @SearchStringPosition) AS int);
SET @InputTimeSecond = CAST(SUBSTRING(@InputTime, @SearchStringPosition + 1, @InputTimeLength) AS int);
SET @OutputSeconds = (@InputTimeMinute * 60) + @InputTimeSecond;
END
IF (@InputTimeLength < 5)
BEGIN
SET @SearchStringPosition = CHARINDEX(@SearchString, @InputTime);
SET @InputTimeMinute = CAST(SUBSTRING(@InputTime, 0, @SearchStringPosition) AS int);
SET @InputTimeSecond = CAST(SUBSTRING(@InputTime, @SearchStringPosition + 1, @InputTimeLength) AS int);
SET @OutputSeconds = (@InputTimeMinute * 60) + @InputTimeSecond;
END
END
IF (@SearchStringOccurrence = 2)
BEGIN
IF (@InputTimeLength = 8)
BEGIN
SET @SearchStringPosition = CHARINDEX(@SearchString, @InputTime);
SET @InputTimeHour = CAST(SUBSTRING(@InputTime, 0, @SearchStringPosition) AS int);
SET @InputTime = SUBSTRING(@InputTime, @SearchStringPosition + 1, @InputTimeLength);
SET @SearchStringPosition = CHARINDEX(@SearchString, @InputTime);
SET @InputTimeMinute = CAST(SUBSTRING(@InputTime, 0, @SearchStringPosition) AS int);
SET @InputTimeSecond = CAST(SUBSTRING(@InputTime, @SearchStringPosition + 1, @InputTimeLength) AS int);
SET @OutputSeconds = (@InputTimeHour * 360) + (@InputTimeMinute * 60) + @InputTimeSecond;
END
IF (@InputTimeLength > 5 AND @InputTimeLength < 8)
BEGIN
SET @SearchStringPosition = CHARINDEX(@SearchString, @InputTime);
SET @InputTimeHour = CAST(SUBSTRING(@InputTime, 0, @SearchStringPosition) AS int);
SET @InputTime = SUBSTRING(@InputTime, @SearchStringPosition + 1, @InputTimeLength);
SET @SearchStringPosition = CHARINDEX(@SearchString, @InputTime);
SET @InputTimeMinute = CAST(SUBSTRING(@InputTime, 0, @SearchStringPosition) AS int);
SET @InputTimeSecond = CAST(SUBSTRING(@InputTime, @SearchStringPosition + 1, @InputTimeLength) AS int);
SET @OutputSeconds = (@InputTimeHour * 360) + (@InputTimeMinute * 60) + @InputTimeSecond;
END
END
IF (@SearchStringOccurrence > 2)
BEGIN
SET @OutputSeconds = -1;
END
RETURN @OutputSeconds;
END