Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- USE [oktell_cc_temp]
- GO
- /****** Object: UserDefinedFunction [dbo].[SetLenForTimeIntervals] Script Date: 28.06.2019 15:10:11 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- -- =============================================
- -- Author: <Author,,Name>
- -- Create date: <Create Date,,>
- -- Description: <Description,,>
- -- =============================================
- ALTER FUNCTION [dbo].[SetLenForTimeIntervals] (@idTask uniqueidentifier, @idOperator uniqueidentifier, @state int, @dateStart datetime, @timeStart datetime, @dateTimeStop datetime, @Interval nvarchar(20)) RETURNS
- @returnTable TABLE(IdTask uniqueidentifier, IdOperator uniqueidentifier, [State] int, DateStart datetime, TimeStart datetime, DateTimeStop datetime, Interval nvarchar(20), LenTime float)
- AS
- BEGIN
- DECLARE @START_TIME time
- DECLARE @END_TIME time
- DECLARE @TABLE_INTERVALS TABLE(Interval nvarchar(20), TimeStart time, TimeEnd time)
- SET @START_TIME = CAST(@timeStart as time)
- SET @END_TIME = CAST(@dateTimeStop as time)
- INSERT INTO @TABLE_INTERVALS
- SELECT Interval, TimeStart, TimeEnd
- FROM [oktell_cc_temp].[dbo].[Time_Intervals_At_Day]
- WHERE @Interval = Interval
- INSERT INTO @returnTable
- SELECT @idTask
- ,@idOperator
- ,@state
- ,@dateStart
- ,@timeStart
- ,@dateTimeStop
- ,@Interval
- ,IIF(@START_TIME >= TimeStart AND @END_TIME <= TimeEnd, datediff(second, @START_TIME, @END_TIME), -1) as LenTime
- FROM @TABLE_INTERVALS
- WHERE IIF(@START_TIME >= TimeStart AND @END_TIME <= TimeEnd, datediff(second, @START_TIME, @END_TIME), -1) != -1
- UNION
- SELECT @idTask
- ,@idOperator
- ,@state
- ,@dateStart
- ,@timeStart
- ,@dateTimeStop
- ,@Interval
- ,IIF(@START_TIME >= TimeStart AND @END_TIME >= TimeEnd AND @START_TIME <= TimeEnd, datediff(second, @START_TIME, TimeEnd), -1) as LenTime
- FROM @TABLE_INTERVALS
- WHERE IIF(@START_TIME >= TimeStart AND @END_TIME >= TimeEnd AND @START_TIME <= TimeEnd, datediff(second, @START_TIME, TimeEnd), -1) != -1
- UNION
- SELECT @idTask
- ,@idOperator
- ,@state
- ,@dateStart
- ,@timeStart
- ,@dateTimeStop
- ,@Interval
- ,IIF(@END_TIME >= TimeStart AND @START_TIME <= TimeStart AND @END_TIME <= TimeEnd, datediff(second, TimeStart, @END_TIME), -1) as LenTime
- FROM @TABLE_INTERVALS
- WHERE IIF(@END_TIME >= TimeStart AND @START_TIME <= TimeStart AND @END_TIME <= TimeEnd, datediff(second, TimeStart, @END_TIME), -1) != -1
- UNION
- SELECT @idTask
- ,@idOperator
- ,@state
- ,@dateStart
- ,@timeStart
- ,@dateTimeStop
- ,@Interval
- ,IIF(@START_TIME <= TimeStart AND @END_TIME >= TimeEnd, 3600, -1) as LenTime
- FROM @TABLE_INTERVALS
- WHERE IIF(@START_TIME <= TimeStart AND @END_TIME >= TimeEnd, 3600, -1) != -1
- RETURN;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement