Si vous cherchez à générer une série de dates, consultez cette question
Disons que je veux générer une série toutes les 5 minutes pendant 24 heures. Comment faire cela dans PostgreSQL?
PostgreSQL peut generate_series()
à partir d'un timestamp
, mais pas à partir de time
.
Est-il préférable de choisir un horodatage arbitraire ou existe-t-il une autre façon de générer la série?
Optimiser:
SELECT x::time
FROM generate_series(timestamp '2000-01-01 00:00'
, timestamp '2000-01-02 00:00'
, interval '5 min') t(x);
La date n'est pas pertinente, utilisez donc des constantes d'horodatage arbitraires. Le cast vers time
est très bon marché.
Cela inclut les limites inférieure et supérieure, nous obtenons donc '00:00'
deux fois . Utilisation '2000-01-01 23:59'
comme limite supérieure pour l'obtenir une seule fois.
En relation:
Je ne sais pas si c'est la meilleure façon, mais nous pouvons utiliser generate_series
Pour générer le min-offset à partir de 00:00:00
, Puis appeler simplement make_interval(mins=>)
pour en obtenir l'intervalle.
SELECT make_interval(mins=>x)::time
FROM generate_series(0, 60*24-5, 5) AS t(x);
J'ai aimé la manière @EvanCarroll, mais encore une autre option -
select x::time
from generate_series
(current_date,current_date + '1 day - 1 second'::interval,'5 minute') as t(x);
Autrement:
SELECT '00:00:00'::time + x * '1 minute'::interval
FROM generate_series(0, 60*24, 5) AS t(x);