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

Perlu Oracle SQL untuk membagi rentang tanggal/waktu berdasarkan hari

Hal ini dimungkinkan untuk melakukan ini dalam SQL. Ada dua trik. Yang pertama adalah menghasilkan serangkaian angka, yang dapat Anda lakukan dengan CTE menggunakan connect .

Yang kedua adalah menyusun logika yang tepat untuk memperluas tanggal, sambil menjaga waktu yang tepat untuk awal dan akhir.

Berikut ini contohnya:

with n as (
      select level n
      from dual connect by level <= 20
     ),
     t as (
      select 1 as id, to_date('01/01/2000 4', 'mm/dd/yyyy hh') as StartDate, to_date('01/03/2000 6', 'mm/dd/yyyy hh') as EndDate from dual union all
      select 2 as id, to_date('01/04/2000 8', 'mm/dd/yyyy hh') as StartDate, to_date('01/04/2000 12', 'mm/dd/yyyy hh') as EndDate from dual union all
      select 3 as id, to_date('01/05/2000', 'mm/dd/yyyy') as StartDate, to_date('01/06/2000', 'mm/dd/yyyy') as EndDate from dual
     )
select t.id,
       (case when n = 1 then StartDate
             else trunc(StartDate + n - 1)
        end) as StartDate,
       (case when trunc(StartDate + n - 1) = trunc(enddate)
             then enddate
             else trunc(StartDate + n)
        end)
from t join
     n
     on StartDate + n - 1 <= EndDate
order by id, StartDate

Ini dia di SQLFiddle.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Cloud:Membuat Database Autonomous Transaction Processing (ATP)

  2. Bagaimana cara mengembalikan RefCursor dari fungsi Oracle?

  3. Bagaimana saya bisa menulis SQL di Oracle dalam kasus saya?

  4. Membuat Mesin Virtual Dengan Oracle VM Virtual Box

  5. Kueri rekursif SQL pada tabel referensi mandiri (Oracle)