sql >> Databáze >  >> RDS >> Oracle

Potřebujete Oracle SQL k rozdělení rozsahu data/času na den

Je to možné provést v SQL. Existují dva triky. První je generování řady čísel, které můžete provést pomocí CTE pomocí connect .

Druhým je sestavení správné logiky pro rozšíření dat při zachování správných časů pro začátek a konec.

Následuje příklad:

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

Tady je to na SQLFiddle.



  1. Porovnání SQL, tvůrců dotazů a ORM

  2. Připojení nelze přetypovat na oracle.jdbc.OracleConnection

  3. Je ODP.NET vyžadován pro klienta Oracle 11g?

  4. MariaDB LENGTH() vs LENGTHB():Jaký je rozdíl?