sql >> Databasteknik >  >> RDS >> Oracle

Räkna dagar mellan två segment

Här är ett sätt att göra beräkningen - UTAN att använda en kalendertabell. Den enda indata som kommer från din första tabell (ID och HIRE_DATE), som jag inkluderade i en WITH-sats (inte en del av frågan som besvarar din fråga!). Allt annat är beräknat. Jag visar hur man beräknar antalet dagar INKLUSIVE hyresdatum; om du inte behöver det, subtrahera 1 på slutet.

TRUNC(<date>, 'iw') är måndagen i veckan <date> . Frågan beräknar hur många dagar det är i EOM-veckan, mellan måndag och EOM, men inte fler än 5 (om EOM kan vara en lördag eller söndag). Den gör en liknande beräkning för HIRE_DATE, men den räknar dagarna från måndag till HIRE_DATE exklusive HIRE_DATE. Den sista delen lägger till 5 dagar för varje hel vecka mellan måndagen den HIRE_DATE och måndagen den 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. Hur hittar man liknande resultat och sorterar efter likhet?

  2. MONTH() Exempel i SQL Server (T-SQL)

  3. Är det möjligt för SQL att hitta poster med dubbletter?

  4. Skapande av Oracle Trigger med kompileringsfel, ORA-02289:sekvensen finns inte