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

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

Susan Sarandon
Susan Sarandon원래의
2024-12-27 14:31:26981검색

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

Oracle SQL에서 업무 시간 계산

시간 간격과 관련된 데이터로 작업할 때 시간을 정확하게 계산하려면 업무 시간을 고려해야 하는 경우가 많습니다. 지정된 시간 사이. Oracle SQL에서는 날짜 함수와 수학적 계산의 조합을 활용하여 이를 달성할 수 있습니다.

영업 시간으로 시간 계산

영업 시간을 기준으로 시작 및 종료 시간을 다음 단계에 따르세요.

1. 기간을 전체 일수로 변환:

  • ISO 주의 시작과 끝 사이의 전체 주 차이를 계산합니다. 이 값에 (10/24)와 (6/7)을 곱하여 전체 일수를 계산합니다.
  • LEAST( TRUNC( end_time ) - TRUNC( 함수를 사용하여 범위 내 마지막 주의 전체 일수를 추가합니다. end_time, 'IW' ), 6 ) * (10/24).
  • 이전 주의 날짜에서 전체 날짜를 뺍니다. LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24)를 사용하여 시작 날짜를 지정합니다.

2. 마지막 날의 시간 처리:

  • LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 )를 사용하여 마지막 날의 시간을 추가합니다.
  • LEAST( GREATEST( start_time - TRUNC( 시작 시간 ) - 8/24, 0 ), 10/24 ).

3. 분 단위로 변환하려면 곱하기:

  • 위 표현식에 24를 곱하면 하루의 분수를 분 단위로 변환할 수 있습니다.

예제 쿼리:

SELECT task,
       start_time,
       end_time,
       ROUND(
         (
           -- Calculate full weeks difference
           ( TRUNC( end_time, 'IW' ) - TRUNC( start_time, 'IW' ) ) * (10/24) * (6/7)
           -- Add full days for final week
           + LEAST( TRUNC( end_time ) - TRUNC( end_time, 'IW' ), 6 ) * (10/24)
           -- Subtract full days before start date
           - LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24)
           -- Add hours of final day
           + LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 )
           -- Subtract hours of day before range starts
           - LEAST( GREATEST( start_time - TRUNC( start_time ) - 8/24, 0 ), 10/24 )
         )
         -- Multiply to convert to minutes
         * 24,
         15 -- Number of decimal places
       ) AS work_day_hours_diff
FROM   your_table;

이 쿼리는 다음을 기준으로 시간을 계산합니다. 제공된 샘플 데이터의 영업 시간은 주말 시간을 고려합니다.

위 내용은 Oracle SQL에서 두 시간 사이의 영업 시간을 계산하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.