Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORACLE SQL:Buat baris baru berdasarkan rentang tanggal

Anda dapat menggunakan kueri rekursif (yang akan berfungsi terlepas dari berapa bulan rentang rentang Anda):

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;

Yang, untuk data sampel:

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;

Keluaran:

db<>fiddle di sini



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan semua data level menggunakan kueri SQL tunggal untuk bill of material

  2. Apakah ada perbedaan kinerja antara concat vs || di oracle

  3. Mencocokkan grup yang mungkin ada atau mungkin tidak ada

  4. Penyedia 'MSDAORA.1' tidak terdaftar di mesin lokal

  5. saya ingin menerima input pengguna di PL SQL dan meneruskannya ke prosedur, tunjukkan program sederhana untuk itu?