> 데이터 베이스 > MySQL 튜토리얼 > Oracle SQL에서 두 날짜 사이의 영업 시간을 계산하는 방법은 무엇입니까?

Oracle SQL에서 두 날짜 사이의 영업 시간을 계산하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-01 09:21:10
원래의
156명이 탐색했습니다.

How to Calculate Business Hours Between Two Dates in Oracle SQL?

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;
로그인 후 복사

설명

  • 주: 쿼리는 먼저 TRUNC( end_time, 'IW' ) 및 TRUNC( start_time, 'IW' ). 이러한 계산은 작업의 시작과 끝을 포함하는 ISO 주의 시작 및 종료 날짜를 제공합니다.
  • 일: LEAST() 및 GREATEST() 함수는 부분 작업을 설명하는 데 사용됩니다. 업무 시간이 적용되지 않을 수 있는 범위의 시작과 끝의 일입니다.
  • 시간: 범위 시작 전날과 마지막 날도 비슷하게 계산됩니다.
  • 곱하기: 최종 계산에서는 결과에 24를 곱하여 분을 시간으로 변환합니다.

샘플 데이터 및 출력

제공된 샘플 포함 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿