Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Cần Oracle SQL để phân chia phạm vi ngày / giờ theo ngày

Có thể thực hiện điều này trong SQL. Có hai thủ thuật. Đầu tiên là tạo một chuỗi số, bạn có thể thực hiện với CTE bằng cách sử dụng connect .

Thứ hai là kết hợp logic phù hợp để mở rộng ngày tháng, trong khi vẫn giữ đúng thời điểm bắt đầu và kết thúc.

Sau đây là một ví dụ:

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

Đây là trên 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. Làm thế nào để xử lý các tham số tùy chọn trong truy vấn SQL?

  2. Lỗi cài đặt máy khách Oracle - đường dẫn quá dài

  3. Hàm CONCAT () trong Oracle

  4. MySQL COALESCE và Hàm NULLIF

  5. chèn hàng loạt từ Java vào Oracle