Oracle
 sql >> база данни >  >> RDS >> Oracle

Нуждаете се от Oracle SQL, за да разделите диапазона от дата/час по ден

Това е възможно да се направи в SQL. Има два трика. Първият е генериране на серия от числа, които можете да направите с CTE, като използвате connect .

Втората е да съберем правилната логика за разширяване на датите, като същевременно запазим точните часове за начало и край.

Следва пример:

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

Ето го на 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. Как да добавите пореден номер за всеки елемент в група с помощта на SQL заявка без временни таблици

  2. WHERE IN условие не приема стойност на низ

  3. Как да намеря зависимости в пакет оракул?

  4. Защо не мога да използвам променливи за свързване в DDL/SCL изрази в динамичен SQL?

  5. Как да създадете функция в PL/SQL?