Oracle SQL에서 업무 시간을 기준으로 시간 계산
Oracle SQL에서는 두 기간 사이의 시간을 계산하는 것이 간단할 수 있습니다. 다만, 영업시간까지 고려해야 한다면 계산은 더욱 복잡해집니다.
영업시간 지정
제공되는 영업시간은 월요일~토요일 8시부터 입니다. 오전부터 오후 6시까지. 이러한 시간을 계산에 통합하려면 날짜 조작과 조건부 논리를 조합하여 사용할 수 있습니다.
SQL 쿼리
다음 SQL 쿼리는 시간 계산을 위한 솔루션을 제공합니다. 특정 사업을 기반으로 시간:
SELECT task, start_time, end_time, ROUND( ( -- Calculate the full weeks difference from the start of ISO weeks. ( TRUNC( end_time, 'IW' ) - TRUNC( start_time, 'IW' ) ) * (10/24) * (6/7) -- Add the full days for the final week. + LEAST( TRUNC( end_time ) - TRUNC( end_time, 'IW' ), 6 ) * (10/24) -- Subtract the full days from the days of the week before the start date. - LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24) -- Add the hours of the final day + LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 ) -- Subtract the hours of the day before the range starts. - LEAST( GREATEST( start_time - TRUNC( start_time ) - 8/24, 0 ), 10/24 ) ) -- Multiply to give minutes rather than fractions of full days. * 24, 15 -- Number of decimal places ) AS work_day_hours_diff FROM your_table;
설명
샘플 데이터 및 출력
제공된 샘플 포함 data:
TASK | START_TIME | END_TIME A | 16-JAN-17 10:00 | 23-JAN-17 11:35 B | 18-JAN-17 17:53 | 19-JAN-17 08:00 C | 13-JAN-17 13:00 | 17-JAN-17 14:52 D | 21-JAN-17 10:00 | 30-JAN-17 08:52
쿼리 결과는 다음과 같습니다.
TASK | START_TIME | END_TIME | WORK_DAY_HOURS_DIFF |
---|---|---|---|
A | 2017-01-16 10:00:00 (MON) | 2017-01-23 11:35:00 (MON) | 61.583333333333333 |
B | 2017-01-18 17:53:00 (WED) | 2017-01-19 08:00:00 (THU) | .116666666666667 |
C | 2017-01-13 13:00:00 (FRI) | 2017-01-17 14:52:00 (TUE) | 31.866666666666667 |
D | 2017-01-21 10:00:00 (SAT) | 2017-01-30 08:52:00 (MON) | 68.866666666666667 |
이러한 결과는 지정된 업무 시간을 기준으로 한 근무 시간을 정확하게 반영합니다.
위 내용은 Oracle SQL에서 두 날짜 사이의 영업 시간을 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!