"WrkHrs"라는 열이 있고 데이터 형식은 시간 (hh : mm : ss)입니다. 저는 직원들의 근무 시간을 합산하겠습니다. 하지만 시간이 있기 때문에 데이터 형식 SQL Server는 sum(columnname)
처럼 사용할 수 없습니다.SQL Server의 시간 필드를 요약하는 방법
SQL 쿼리에서 시간 데이터 형식을 어떻게 요약 할 수 있습니까?
"WrkHrs"라는 열이 있고 데이터 형식은 시간 (hh : mm : ss)입니다. 저는 직원들의 근무 시간을 합산하겠습니다. 하지만 시간이 있기 때문에 데이터 형식 SQL Server는 sum(columnname)
처럼 사용할 수 없습니다.SQL Server의 시간 필드를 요약하는 방법
SQL 쿼리에서 시간 데이터 형식을 어떻게 요약 할 수 있습니까?
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;
그러나 잘못된 데이터 형식을 사용하고 있습니다. TIME
은 간격 또는 기간이 아닌 특정 시점을 나타내는 데 사용됩니다. 근무 시간을 StartTime
과 EndTime
의 두 개의 별개의 열에 저장하는 것이 합리적이지 않습니까?
두 열을 사용해 보았지만 시간차 함수가 시간 또는 분 사이의 diff를 계산하지만 함께 사용하는 것은 아닙니다. 시간과 분을 함께 계산할 방법을 찾지 못했습니다. 그래서 내가이 방법을 택했다. – Sas
이건 문제가되지 않습니다. 항상 분당 시간/분을 얻을 수 있습니다. 230 분 = 2 시간 50 분. 나는 이것이 내 대답에서 정확히 설명한다. –
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
분 시간과 종료 시간을 시작하고 다음과 같이 읽을 수있는 형식으로 변환 당신이 변화의 차이를 계산할 수 있습니다 직원의 근무 시간을 요약하기 위하여 :
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
을 결과 : 02:47 2 시간 47 분
왜 'INT'또는 'NUMERIC'대신에 'TIME'을 사용합니까? 데이터가 'TIME'이기 때문에 집계하는 작업 시간이 24 시간보다 클 때 쿼리가 반환해야하는 결과가 'INT'여야합니까? – Lamak
... 또는 두 개의 개별 열. –
@Lamak 예 숫자 데이터 형식을 사용할 수도 있다고 생각합니다. 그것은 나를 위해 더 쉬울 것입니다. – Sas