sql >> Database >  >> RDS >> Oracle

Maak een lijst met alle maanden van een datumkolom in ORACLE SQL

Je hebt een typfout gemaakt en date wrote geschreven in plaats van dates maar je moet ook een tweede wijziging aanbrengen en ADD_MONTHS . gebruiken in de recursieve zoekopdracht WHERE clausule of u genereert een te veel rijen.

WITH t1(test)  AS (
  SELECT MIN(alldates)
  FROM dates 
UNION ALL 
  SELECT ADD_MONTHS(test,1)
  FROM t1 
  WHERE ADD_MONTHS(test,1) <= (SELECT MAX(alldates) FROM dates)
)
SELECT * FROM t1

Welke uitgangen:

Een efficiëntere zoekopdracht zou echter zijn om de minimum- en maximumwaarden in dezelfde zoekopdracht te krijgen en vervolgens te herhalen met behulp van deze vooraf gevonden grenzen:

WITH t1(min_date, max_date)  AS (
  SELECT MIN(alldates),
         MAX(alldates)  
  FROM   dates 
UNION ALL 
  SELECT ADD_MONTHS(min_date,1),
         max_date
  FROM   t1 
  WHERE  ADD_MONTHS(min_date,1) <= max_date
)
SELECT min_date AS month
FROM   t1

db<>fiddle hier

Bijwerken

Oracle 11gR2 heeft bugs bij het afhandelen van recursieve datumquery's; dit is opgelost in latere Oracle-versies, maar als u SQL Fiddle en Oracle 11gR2 wilt gebruiken, moet u een numerieke waarde herhalen en geen datum. Zoiets als dit:

SQL Fiddle

Oracle 11g R2 Schema-instellingen :

CREATE TABLE dates(
alldates date);

INSERT INTO dates  (alldates) VALUES ('1-May-2017');
INSERT INTO dates  (alldates) VALUES ('1-Mar-2018');

Query 1 :

WITH t1(min_date, month, total_months)  AS (
  SELECT MIN(alldates),
         0,
         MONTHS_BETWEEN(MAX(alldates),MIN(alldates))
  FROM   dates 
UNION ALL 
  SELECT min_date,
         month+1,
         total_months
  FROM   t1 
  WHERE  month+1<=total_months
)
SELECT ADD_MONTHS(min_date,month) AS month
FROM   t1

Resultaten :

|                MONTH |
|----------------------|
| 2017-05-01T00:00:00Z |
| 2017-06-01T00:00:00Z |
| 2017-07-01T00:00:00Z |
| 2017-08-01T00:00:00Z |
| 2017-09-01T00:00:00Z |
| 2017-10-01T00:00:00Z |
| 2017-11-01T00:00:00Z |
| 2017-12-01T00:00:00Z |
| 2018-01-01T00:00:00Z |
| 2018-02-01T00:00:00Z |
| 2018-03-01T00:00:00Z |


  1. Opgeslagen procedureparameters ophalen via C# of SQL?

  2. Gegevenstoegang in-/uitschakelen in SQL Server (T-SQL-voorbeeld)

  3. Fout (bijna AAN op positie 25) tijdens het importeren van de tabel voor WORDPRESS (Een externe sleutelfout)

  4. Hoe het resultaat van de MySql-query in variabele op te slaan met node-mysql