복붙노트

[SQL] SQL Server의 분 계산 시간 차이

SQL

SQL Server의 분 계산 시간 차이

나는 분에서 두 시간 사이의 시간 차이를해야합니다. 아래와 같이 나는 시작 시간과 종료 시간을 보내고 있어요 :

start time | End Time    
11:15:00   | 13:15:00    
10:45:00   | 18:59:00

I는 각각 11:15 12:00 12:00 13:00 13:00 13시 15분 시간차에 대응 45,60,15 같은 첫 번째 행에 대한 출력을 필요로한다.

해결법

  1. ==============================

    1.예상대로 다음 작품 :

    예상대로 다음 작품 :

    SELECT  Diff = CASE DATEDIFF(HOUR, StartTime, EndTime)
                        WHEN 0 THEN CAST(DATEDIFF(MINUTE, StartTime, EndTime) AS VARCHAR(10))
                        ELSE CAST(60 - DATEPART(MINUTE, StartTime) AS VARCHAR(10)) +
                            REPLICATE(',60', DATEDIFF(HOUR, StartTime, EndTime) - 1) + 
                            + ',' + CAST(DATEPART(MINUTE, EndTime) AS VARCHAR(10))
                    END
    FROM    (VALUES 
                (CAST('11:15' AS TIME), CAST('13:15' AS TIME)),
                (CAST('10:45' AS TIME), CAST('18:59' AS TIME)),
                (CAST('10:45' AS TIME), CAST('11:59' AS TIME))
            ) t (StartTime, EndTime);
    

    (24) 열을 얻으려면, 당신은 24 개의 경우 표현 같은 것을 사용할 수 있습니다 :

    SELECT  [0] = CASE WHEN DATEDIFF(HOUR, StartTime, EndTime) = 0
                            THEN DATEDIFF(MINUTE, StartTime, EndTime)
                        ELSE 60 - DATEPART(MINUTE, StartTime)
                    END,
            [1] = CASE WHEN DATEDIFF(HOUR, StartTime, EndTime) = 1 
                            THEN DATEPART(MINUTE, EndTime)
                        WHEN DATEDIFF(HOUR, StartTime, EndTime) > 1 THEN 60
                    END,
            [2] = CASE WHEN DATEDIFF(HOUR, StartTime, EndTime) = 2
                            THEN DATEPART(MINUTE, EndTime)
                        WHEN DATEDIFF(HOUR, StartTime, EndTime) > 2 THEN 60
                    END -- ETC
    FROM    (VALUES 
                (CAST('11:15' AS TIME), CAST('13:15' AS TIME)),
                (CAST('10:45' AS TIME), CAST('18:59' AS TIME)),
                (CAST('10:45' AS TIME), CAST('11:59' AS TIME))
            ) t (StartTime, EndTime);
    

    또한 작품을 다음과 반복 같은 경우에 식을 반복보다 짧은 끝낼 수 있습니다 :

    WITH Numbers (Number) AS
    (   SELECT  ROW_NUMBER() OVER(ORDER BY t1.N) - 1
        FROM    (VALUES (1), (1), (1), (1), (1), (1)) AS t1 (N)
                CROSS JOIN (VALUES (1), (1), (1), (1)) AS t2 (N)
    ), YourData AS
    (   SELECT  StartTime, EndTime
        FROM    (VALUES 
                    (CAST('11:15' AS TIME), CAST('13:15' AS TIME)),
                    (CAST('09:45' AS TIME), CAST('18:59' AS TIME)),
                    (CAST('10:45' AS TIME), CAST('11:59' AS TIME))
                ) AS t (StartTime, EndTime)
    ), PivotData AS
    (   SELECT  t.StartTime,
                t.EndTime,
                n.Number,
                MinuteDiff = CASE WHEN n.Number = 0 AND DATEDIFF(HOUR, StartTime, EndTime) = 0 THEN DATEDIFF(MINUTE, StartTime, EndTime)
                                    WHEN n.Number = 0 THEN 60 - DATEPART(MINUTE, StartTime)
                                    WHEN DATEDIFF(HOUR, t.StartTime, t.EndTime) <= n.Number THEN DATEPART(MINUTE, EndTime)
                                    ELSE 60
                                END
        FROM    YourData AS t
                INNER JOIN Numbers AS n
                    ON n.Number <= DATEDIFF(HOUR, StartTime, EndTime)
    )
    SELECT  *
    FROM    PivotData AS d
            PIVOT 
            (   MAX(MinuteDiff)
                FOR Number IN 
                (   [0], [1], [2], [3], [4], [5], 
                    [6], [7], [8], [9], [10], [11],
                    [12], [13], [14], [15], [16], [17], 
                    [18], [19], [20], [21], [22], [23]
                ) 
            ) AS pvt;
    

    이 경우 표현은 이들 24 개 번호는 PIVOT을 사용하여 열로 백업 압연 반복 할 필요가 없다, 그래서 24 수의 테이블에 가입하여 작동

  2. ==============================

    2.분 차이로 참조 DateDiff를 사용합니다 :

    분 차이로 참조 DateDiff를 사용합니다 :

    SELECT DATEDIFF(MINUTE, '11:10:10' , '11:20:00') AS MinuteDiff
    

    쿼리 당신을 도울 수 :

    SELECT StartTime, EndTime, DATEDIFF(MINUTE, StartTime , EndTime) AS MinuteDiff 
    FROM TableName
    
  3. ==============================

    3.당신은 DATEDIFF을 사용할 수 있습니다 (이것은이다 기능 내장 a)와 % 메이크업 결과 및 CONCAT (규모 계산을위한) 하나 개의 컬럼

    당신은 DATEDIFF을 사용할 수 있습니다 (이것은이다 기능 내장 a)와 % 메이크업 결과 및 CONCAT (규모 계산을위한) 하나 개의 컬럼

    select CONCAT('Month: ',MonthDiff,' Days: ' , DayDiff,' Minutes: ',MinuteDiff,' Seconds: ',SecondDiff) as T  from 
    (SELECT DATEDIFF(MONTH, '2017-10-15 19:39:47' , '2017-12-31 23:59:59') % 12 as MonthDiff,
            DATEDIFF(DAY, '2017-10-15 19:39:47' , '2017-12-31 23:59:59') % 30 as DayDiff,
            DATEDIFF(HOUR, '2017-10-15 19:39:47' , '2017-12-31 23:59:59') % 24 as HourDiff,
            DATEDIFF(MINUTE, '2017-10-15 19:39:47' , '2017-12-31 23:59:59') % 60 AS MinuteDiff,
            DATEDIFF(SECOND, '2017-10-15 19:39:47' , '2017-12-31 23:59:59') % 60 AS SecondDiff) tbl
    
  4. ==============================

    4.그렇다 DATEDIFF에서 당신은 또한 TIMEDIFF 기능 또는 TIMESTAMPDIFF를 사용할 수 있습니다.

    그렇다 DATEDIFF에서 당신은 또한 TIMEDIFF 기능 또는 TIMESTAMPDIFF를 사용할 수 있습니다.

    SET @date1 = '2010-10-11 12:15:35', @date2 = '2010-10-10 00:00:00';
    
    SELECT 
    TIMEDIFF(@date1, @date2) AS 'TIMEDIFF',
    TIMESTAMPDIFF(hour, @date1, @date2) AS 'Hours',
    TIMESTAMPDIFF(minute, @date1, @date2) AS 'Minutes',
    TIMESTAMPDIFF(second, @date1, @date2) AS 'Seconds';
    

    결과

    TIMEDIFF : 36:15:35
    Hours : -36
    Minutes : -2175
    Seconds : -130535
    
  5. ==============================

    5.이 시도..

    이 시도..

    select starttime,endtime, case
      when DATEDIFF(minute,starttime,endtime) < 60  then DATEDIFF(minute,starttime,endtime) 
      when DATEDIFF(minute,starttime,endtime) >= 60
      then '60,'+ cast( (cast(DATEDIFF(minute,starttime,endtime) as int )-60) as nvarchar(50) )
    end from TestTable123416
    

    모든 당신의 필요 참조 DateDiff입니다 ..

  6. from https://stackoverflow.com/questions/26991807/calculate-time-difference-in-minutes-in-sql-server by cc-by-sa and MIT license