Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hitung hari antara dua segmen

Berikut adalah salah satu cara untuk melakukan perhitungan - TANPA menggunakan tabel kalender. Satu-satunya data input adalah yang berasal dari tabel pertama Anda (ID dan HIRE_DATE), yang saya sertakan dalam klausa WITH (bukan bagian dari kueri yang menjawab pertanyaan Anda!). Segala sesuatu yang lain dihitung. Saya menunjukkan cara menghitung jumlah hari TERMASUK tanggal sewa; jika Anda tidak membutuhkannya, kurangi 1 di bagian akhir.

TRUNC(<date>, 'iw') adalah hari Senin dalam seminggu <date> . Kueri menghitung berapa hari dalam seminggu EOM, antara Senin dan EOM, tetapi tidak lebih dari 5 (jika EOM mungkin hari Sabtu atau Minggu). Ini melakukan penghitungan serupa untuk HIRE_DATE, tetapi menghitung hari dari Senin hingga HIRE_DATE tidak termasuk TANGGAL PEREKRUTAN. Bagian terakhir adalah menambahkan 5 hari untuk setiap minggu penuh antara Senin HIRE_DATE dan Senin 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana tanggal disimpan di Oracle?

  2. permintaan penghapusan oracle membutuhkan terlalu banyak waktu

  3. menggunakan pl/sql bagaimana cara membuka direktori?

  4. SaveOrUpdate Hibernate mengabaikan properti kolom bukan-null

  5. Setara dengan 'printf' Oracle