Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Potrzebujesz Oracle SQL, aby podzielić zakres dat/godzin według dnia

Jest to możliwe w SQL. Są dwie sztuczki. Pierwszym z nich jest wygenerowanie serii liczb, co można zrobić za pomocą CTE za pomocą connect .

Drugim jest zestawienie właściwej logiki, aby rozszerzyć daty, przy jednoczesnym zachowaniu właściwych godzin początku i końca.

Oto przykład:

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

Tutaj jest na 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. Jak zweryfikować numer karty kredytowej i zidentyfikować jej typ za pomocą PL/SQL?

  2. Funkcja NLS_LOWER() w Oracle

  3. Podłączanie oprogramowania IRI do Oracle

  4. Jak mogę przyspieszyć row_number w Oracle?

  5. Wybierz wartość elementu xml w Oracle