[SQL] SQL Server의 분 계산 시간 차이
SQLSQL 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.예상대로 다음 작품 :
예상대로 다음 작품 :
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.분 차이로 참조 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.당신은 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.그렇다 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.이 시도..
이 시도..
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입니다 ..
from https://stackoverflow.com/questions/26991807/calculate-time-difference-in-minutes-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SSRS 표현에 '처럼'사용 (0) | 2020.07.05 |
---|---|
[SQL] WHERE IN 절에서 SQL 사용 CASE 문 (0) | 2020.07.05 |
[SQL] 수있는 "IN"연산자를 사용 오라클에서 LIKE-와일드 카드 (%)? (0) | 2020.07.05 |
[SQL] 어떻게 SQL을 사용하여 문자열에서 특정 문자의 발생 횟수를 찾을 수 있습니까? (0) | 2020.07.05 |
[SQL] 가장 안전한 방법은 테이블에서 마지막 레코드 ID를 얻으려면 (0) | 2020.07.05 |