GENERATE_SERIES
Entsprechung in MySQL:
Erzeugt eine Reihe von Werten von start bis stop mit der angegebenen Schrittweite, eine Zeile pro Wert.
PostgreSQL 17.9
GENERATE_SERIES(start, stop [, step])- [ ]optionaler Teil
- start
- Erster Wert der Reiheinteger | numeric | timestamp
- stop
- Grenze der Reihe, gehört dazu, wenn die Schrittweite sie trifftinteger | numeric | timestamp
- step
- Schrittweite, standardmäßig 1; bei Datumswerten Pflicht und als Intervall angegebeninteger | numeric | intervalOptional
Rückgabewert
Menge von Zeilen vom Typ von start (bei DATE timestamp with time zone); leere Menge, wenn start bei positiver Schrittweite größer als stop ist oder bei negativer kleiner
Beispiele
Zahlen mit Schrittweite 3
PostgreSQL 17.9
SELECT GENERATE_SERIES(1, 10, 3);Datumswerte Tag für Tag
PostgreSQL 17.9
SELECT GENERATE_SERIES(
DATE '2024-03-01',
DATE '2024-03-05',
INTERVAL '1 day'
)::DATE AS DAY;Reihe in FROM wie eine Tabelle
PostgreSQL 17.9
SELECT n,
n * n AS square
FROM GENERATE_SERIES(1, 5) AS n;Zahlungen nach Monaten, auch leere
PostgreSQL 17.9
SELECT TO_CHAR(m, 'YYYY-MM') AS MONTH,
COUNT(p.payment_id) AS payments
FROM GENERATE_SERIES(
DATE '2005-01-01',
DATE '2005-12-01',
INTERVAL '1 month'
) AS m
LEFT JOIN Payments AS p ON DATE_TRUNC('month', p.date) = m
GROUP BY m
ORDER BY m;Countdown mit negativer Schrittweite
PostgreSQL 17.9
SELECT GENERATE_SERIES(10, 1, -3) AS countdown;Details
Meist steht die Funktion wie eine Tabelle in FROM: FROM GENERATE_SERIES(1, 5) AS n. So kannst du zum Beispiel alle Monate eines Jahres erzeugen und Daten mit LEFT JOIN daran anschließen, um Monate ohne Einträge zu sehen.
Eine Schrittweite von 0 führt zu einem Fehler. Bei negativer Schrittweite läuft die Reihe abwärts, start muss dann größer als stop sein.