[SQL] 어떻게 SQL Server의 시간 필드를 요약하기
SQL어떻게 SQL Server의 시간 필드를 요약하기
나는 열은 "WrkHrs"라고하고 데이터 유형은 시간 (hh : mm : ss)입니다. 나는 직원의 근무 시간을 요약하고 싶다. 그러나 그것의 시간 데이터 형식 SQL 서버 나 합 (기둥 이름)처럼 사용하지 않기 때문에.
어떻게 SQL 쿼리의 시간 데이터 형식 필드를 요약 할 수 있습니까?
해결법
-
==============================
1.
SELECT EmployeeID, minutes_worked = SUM(DATEDIFF(MINUTE, '0:00:00', WrkHrs)) FROM dbo.table -- WHERE ... GROUP BY EmployeeID;
당신은 프론트 엔드에 꽤 포맷 할 수 있습니다. 또는 T-SQL에서 :
;WITH w(e, mw) AS ( SELECT EmployeeID, SUM(DATEDIFF(MINUTE, '0:00:00', WrkHrs)) FROM dbo.table -- WHERE ... GROUP BY EmployeeID ) SELECT EmployeeID = e, WrkHrs = RTRIM(mw/60) + ':' + RIGHT('0' + RTRIM(mw%60),2) FROM w;
그러나 잘못된 데이터 유형을 사용하고 있습니다. 시간은 특정 시점이 아닌 간격 또는 기간을 표시하는 데 사용됩니다. 이 의미는 두 가지 열, 상영 시간 및 종료 시각에 자신의 근무 시간을 저장하지 않을까요?
-
==============================
2.당신이 분에 시프트 시작 시간과 종료 시간의 차이를 계산하고 다음과 같이 읽을 수있는 형식으로 변환 할 수있는 직원의 근무 시간을 요약하기 위하여 :
당신이 분에 시프트 시작 시간과 종료 시간의 차이를 계산하고 다음과 같이 읽을 수있는 형식으로 변환 할 수있는 직원의 근무 시간을 요약하기 위하여 :
DECLARE @StartTime datetime = '08:00' DECLARE @EndTime datetime = '10:47' DECLARE @durMinutes int DECLARE @duration nvarchar(5) SET @durMinutes = DATEDIFF(MINUTE, @StartTime, @EndTime) SET @duration = (SELECT RIGHT('00' + CAST((@durMinutes / 60) AS VARCHAR(2)),2) + ':' + RIGHT('00' + CAST((@durMinutes % 60) AS VARCHAR(2)), 2)) SELECT @duration
결과 : 2시 47분 2 시간 47분
-
==============================
3.
DECLARE @Tab TABLE ( data CHAR(5) ) INSERT @Tab SELECT '25:30' UNION ALL SELECT '31:45' UNION ALL SELECT '16:00' SELECT STUFF(CONVERT(CHAR(8), DATEADD(SECOND, theHours + theMinutes, '19000101'), 8), 1, 2, CAST((theHours + theMinutes) / 3600 AS VARCHAR(12))) FROM ( SELECT ABS(SUM(CASE CHARINDEX(':', data) WHEN 0 THEN 0 ELSE 3600 * LEFT(data, CHARINDEX(':', data) - 1) END)) AS theHours, ABS(SUM(CASE CHARINDEX(':', data) WHEN 0 THEN 0 ELSE 60 * SUBSTRING(data, CHARINDEX(':', data) + 1, 2) END)) AS theMinutes FROM @Tab ) AS d
-
==============================
4.MS SQL 서버를 들어, WorkingTime이 시간, 당신이 고려해야 정리해하기 위해 VARCHAR로 저장하는 경우 :
MS SQL 서버를 들어, WorkingTime이 시간, 당신이 고려해야 정리해하기 위해 VARCHAR로 저장하는 경우 :
당신이 그것을 구문 분석 할 필요가 있으므로 1) 시간 형식은 합계를 지원하지 않습니다
2) 23 : 59 : 59.9999999 시간의 최대 값이다.
WorkingMinutes : 그래서, 작동 코드는 당신에게 WorkingHours의 총 수를 얻을 수 WorkingSeconds는 다음과 같다 :
SELECT CAST(FORMAT((SUM((DATEPART("ss",WorkingTime) + DATEPART("mi",WorkingTime) * 60 + DATEPART("hh",WorkingTime) * 3600)) / 3600),'00') as varchar(max)) + ':' + CAST(FORMAT((SUM((DATEPART("ss",WorkingTime) + DATEPART("mi",WorkingTime) * 60 + DATEPART("hh",WorkingTime) * 3600)) % 3600 / 60),'00') as varchar(max)) + ':' + CAST(FORMAT((SUM((DATEPART("ss",WorkingTime) + DATEPART("mi",WorkingTime) * 60 + DATEPART("hh",WorkingTime) * 3600)) % 3600 % 60),'00') as varchar(max)) as WorkingTimeSum FROM TableName
from https://stackoverflow.com/questions/9725732/how-to-sum-up-time-field-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 절과 절에서 테이블 조인을 떠날 때 경우의 차이점은 무엇입니까? (0) | 2020.04.21 |
---|---|
[SQL] SQL 서버 * = 연산자? (0) | 2020.04.21 |
[SQL] java.sql.SQLException이있다 : mysql : 없음 적합한 드라이버는 JDBC을 찾을 수 없습니다 // localhost를 : 3306 / DBNAME [중복] (0) | 2020.04.20 |
[SQL] 연결이 닫힐 때 어떤 커밋되지 않은 트랜잭션이 어떻게됩니까? (0) | 2020.04.20 |
[SQL] 때 또는 당신이 오른쪽 외부를 사용하는 이유에 참여하는 대신 왼쪽? (0) | 2020.04.20 |