sql >> Database >  >> RDS >> Oracle

Oracle SQL nodig om het datum-/tijdbereik op te splitsen per dag

Het is mogelijk om dit in SQL te doen. Er zijn twee trucs. De eerste is het genereren van een reeks getallen, die u kunt doen met een CTE met behulp van connect .

De tweede is het samenstellen van de juiste logica om de datums uit te breiden, terwijl de juiste tijden voor het begin en het einde worden aangehouden.

Het volgende is een voorbeeld:

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

Hier is het op SQLFiddle.



  1. Openshift en net-ssh incompatibiliteit? (2.9.3-beta1 versus 2.9.2)

  2. phpMyAdmin gooit een #2002 kan niet inloggen op de mysql-server phpmyadmin

  3. Lijst van alle databases van een gekoppelde server in SQL Server (T-SQL-voorbeelden)

  4. Waarom kan ik geen kolomaliassen gebruiken in de volgende SELECT-expressie?