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

ORACLE SQL:Tạo hàng mới trên cơ sở phạm vi ngày

Bạn có thể sử dụng truy vấn đệ quy (sẽ hoạt động bất kể phạm vi của bạn kéo dài bao nhiêu tháng):

WITH months ( id, start_date, end_date, final_date ) AS (
  SELECT id,
         start_date,
         LEAST( LAST_DAY( start_date ), end_date ),
         end_date
  FROM   table_name
UNION ALL
  SELECT id,
         end_date + INTERVAL '1' DAY,
         LEAST( ADD_MONTHS( end_date, 1 ), final_date ),
         final_date
  FROM   months
  WHERE  end_date < final_date
)
SEARCH DEPTH FIRST BY final_date SET dt_order
SELECT id,
       start_date,
       end_date
FROM   months;

Mà, đối với dữ liệu mẫu:

CREATE TABLE table_name (id, start_date, end_date) AS
SELECT 44, DATE '2020-01-04', DATE '2020-01-04' FROM DUAL UNION ALL
SELECT 44, DATE '2020-01-30', DATE '2020-02-10' FROM DUAL UNION ALL
SELECT 44, DATE '2020-02-27', DATE '2020-03-03' FROM DUAL;

Kết quả đầu ra:

db <> fiddle tại đây



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Từ khóa 'Partition By' và 'Row_Number' của Oracle

  2. thủ tục lưu trữ cuộc gọi oracle bên trong lựa chọn

  3. Tôi có thể thay đổi thuộc tính AutoCommit của kết nối JDBC nhiều lần không

  4. Buộc SELECT bên ngoài không thành công nếu SELECT bên trong chứa số nhận dạng không hợp lệ

  5. JDBC Thin Oracle 11g