sql >> Database >  >> RDS >> Oracle

Tel dagen tussen twee segmenten

Hier is een manier om de berekening uit te voeren - ZONDER een kalendertabel te gebruiken. De enige invoergegevens zijn wat afkomstig is van uw eerste tabel (ID en HIRE_DATE), die ik heb opgenomen in een WITH-clausule (geen onderdeel van de query die uw vraag beantwoordt!). Al het andere wordt berekend. Ik laat zien hoe je het aantal dagen kunt berekenen INCLUSIEF de huurdatum; als je dat niet nodig hebt, trek dan 1 af aan het einde.

TRUNC(<date>, 'iw') is de maandag van de week van <date> . De query berekent hoeveel dagen er in de EOM-week zitten, tussen maandag en EOM, maar niet meer dan 5 (in het geval EOM een zaterdag of zondag is). Het doet een vergelijkbare berekening voor HIRE_DATE, maar het telt de dagen van maandag tot HIRE_DATE exclusief HUUR DATUM. Het laatste deel is het toevoegen van 5 dagen voor elke volledige week tussen de maandag van HIRE_DATE en de maandag van 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. Sorteren op datum (nieuwste)

  2. Aan te bevelen Hot Backup-systeem voor MySQL?

  3. MySQL 8 Selecteer Statement om 'Last_query_cost' te krijgen

  4. Python psycopg2 controlerij bestaat