sql >> Database teknologi >  >> RDS >> Oracle

Tæl dage mellem to segmenter

Her er en måde at lave udregningen på - UDEN at bruge en kalendertabel. De eneste inputdata er, hvad der kommer fra din første tabel (ID og HIRE_DATE), som jeg inkluderede i en WITH-klausul (ikke en del af forespørgslen, der besvarer dit spørgsmål!). Alt andet er beregnet. Jeg viser, hvordan man beregner antallet af dage INKLUSIVE lejedatoen; hvis du ikke har brug for det, så træk 1 fra til sidst.

TRUNC(<date>, 'iw') er mandagen i ugen <date> . Forespørgslen beregner, hvor mange dage der er i EOM-ugen, mellem mandag og EOM, men ikke mere end 5 (i tilfælde af at EOM kan være en lørdag eller søndag). Den udfører en lignende beregning for HIRE_DATE, men den tæller dagene fra mandag til HIRE_DATE eksklusive ANSÆTTELSESDATO. Den sidste del tilføjer 5 dage for hver hel uge mellem mandagen HIRE_DATE og mandagen EOM.

with
  sample_data(id, hire_date) as (
    select 1, to_date('09/26/2018', 'mm/dd/yyyy') from dual union all
    select 2, to_date('07/10/2018', 'mm/dd/yyyy') from dual
  )
select id, to_char(hire_date, 'Dy mm/dd/yyyy')                      as hire_date,
       to_char(eom, 'Dy mm/dd/yyyy')                                as eom,
       least(5, eom - eom_mon + 1) - least(5, hire_date - hire_mon)
       + (eom_mon - hire_mon) * 5 / 7                               as workdays
from   (
         select id, hire_date, last_day(hire_date) as eom,
                trunc(hire_date, 'iw')             as hire_mon,
                trunc(last_day(hire_date), 'iw')   as eom_mon
         from   sample_data
       )
;

        ID HIRE_DATE               EOM                       WORKDAYS
---------- ----------------------- ----------------------- ----------
         1 Wed 09/26/2018          Sun 09/30/2018                   3
         2 Tue 07/10/2018          Tue 07/31/2018                  16


  1. SQLAlchemy+pymysql-fejl:sqlalchemy.util.queue.Empty

  2. Udtræk værdi fra xml clob med Namespace ved hjælp af Oracle pl/sql

  3. Oracle SQLPlus ORA-01017 ugyldige legitimationsoplysninger ved angivelse af skema

  4. OracleBulkCopy Class i Oracle.ManagedDataAccess.dll?