Advertisement
WorkAkkaunt

Функция для подсчета временных интервалов

Jun 28th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.66 KB | None | 0 0
  1. USE [oktell_cc_temp]
  2. GO
  3. /****** Object:  UserDefinedFunction [dbo].[SetLenForTimeIntervals]    Script Date: 28.06.2019 15:10:11 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. -- =============================================
  9. -- Author:      <Author,,Name>
  10. -- Create date: <Create Date,,>
  11. -- Description: <Description,,>
  12. -- =============================================
  13. ALTER FUNCTION [dbo].[SetLenForTimeIntervals] (@idTask uniqueidentifier, @idOperator uniqueidentifier, @state int, @dateStart datetime, @timeStart datetime, @dateTimeStop datetime, @Interval nvarchar(20)) RETURNS
  14.     @returnTable TABLE(IdTask uniqueidentifier, IdOperator uniqueidentifier, [State] int, DateStart datetime, TimeStart datetime, DateTimeStop datetime, Interval nvarchar(20), LenTime float)
  15. AS
  16. BEGIN
  17.     DECLARE @START_TIME time
  18.     DECLARE @END_TIME time
  19.     DECLARE @TABLE_INTERVALS TABLE(Interval nvarchar(20), TimeStart time, TimeEnd time)
  20.  
  21.     SET @START_TIME = CAST(@timeStart as time)
  22.     SET @END_TIME = CAST(@dateTimeStop as time)
  23.  
  24.     INSERT INTO @TABLE_INTERVALS
  25.     SELECT Interval, TimeStart, TimeEnd
  26.     FROM [oktell_cc_temp].[dbo].[Time_Intervals_At_Day]
  27.     WHERE @Interval = Interval
  28.  
  29.     INSERT INTO @returnTable
  30.     SELECT @idTask
  31.         ,@idOperator
  32.         ,@state
  33.         ,@dateStart
  34.         ,@timeStart
  35.         ,@dateTimeStop
  36.         ,@Interval
  37.         ,IIF(@START_TIME >= TimeStart AND @END_TIME <= TimeEnd, datediff(second, @START_TIME, @END_TIME), -1) as LenTime
  38.     FROM @TABLE_INTERVALS
  39.     WHERE IIF(@START_TIME >= TimeStart AND @END_TIME <= TimeEnd, datediff(second, @START_TIME, @END_TIME), -1) != -1
  40.     UNION
  41.     SELECT @idTask
  42.         ,@idOperator
  43.         ,@state
  44.         ,@dateStart
  45.         ,@timeStart
  46.         ,@dateTimeStop
  47.         ,@Interval
  48.         ,IIF(@START_TIME >= TimeStart AND @END_TIME >= TimeEnd AND @START_TIME <= TimeEnd, datediff(second, @START_TIME, TimeEnd), -1) as LenTime
  49.     FROM @TABLE_INTERVALS
  50.     WHERE IIF(@START_TIME >= TimeStart AND @END_TIME >= TimeEnd AND @START_TIME <= TimeEnd, datediff(second, @START_TIME, TimeEnd), -1) != -1
  51.     UNION
  52.     SELECT @idTask
  53.         ,@idOperator
  54.         ,@state
  55.         ,@dateStart
  56.         ,@timeStart
  57.         ,@dateTimeStop
  58.         ,@Interval
  59.         ,IIF(@END_TIME >= TimeStart AND @START_TIME <= TimeStart AND @END_TIME <= TimeEnd, datediff(second, TimeStart, @END_TIME), -1) as LenTime
  60.     FROM @TABLE_INTERVALS
  61.     WHERE IIF(@END_TIME >= TimeStart AND @START_TIME <= TimeStart AND @END_TIME <= TimeEnd, datediff(second, TimeStart, @END_TIME), -1) != -1
  62.     UNION
  63.     SELECT @idTask
  64.         ,@idOperator
  65.         ,@state
  66.         ,@dateStart
  67.         ,@timeStart
  68.         ,@dateTimeStop
  69.         ,@Interval
  70.         ,IIF(@START_TIME <= TimeStart AND @END_TIME >= TimeEnd, 3600, -1) as LenTime
  71.     FROM @TABLE_INTERVALS
  72.     WHERE IIF(@START_TIME <= TimeStart AND @END_TIME >= TimeEnd, 3600, -1) != -1
  73.  
  74.     RETURN;
  75. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement