Maison >base de données >tutoriel mysql >Comment générer efficacement une plage de dates en SQL ?

Comment générer efficacement une plage de dates en SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-23 17:22:13174parcourir

How to Efficiently Generate a Date Range in SQL?

Compétences en matière de génération de plages de dates SQL

Il existe de nombreuses façons de générer une liste de dates dans une plage spécifiée en SQL. Cet article prend comme exemple la génération de la séquence de dates du « 2010-01-20 » au « 2010-01-24 » pour présenter une solution efficace.

Cette méthode utilise une sous-requête pour générer une collection de dates complète. Grâce à la combinaison de quatre boucles imbriquées, la sous-requête peut générer efficacement des séquences de dates allant jusqu'à 10 000 jours et peut être facilement étendue à des plages de dates plus longues.

<code class="language-sql">select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as a
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as b
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as c
cross join (select 0 as a union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) as d</code>

Nous filtrons ensuite la liste de dates générée pour extraire les dates dans la plage cible :

<code class="language-sql">select a.Date
from (
select curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a) ) DAY as Date
from (...) as a
) a
where a.Date between '2010-01-20' and '2010-01-24'</code>

Les avantages de cette approche sont : aucune boucle, procédure stockée ou table temporaire requise, efficace et portable sur plusieurs plates-formes de bases de données. La génération de 10 000 jours de dates prend moins de 0,01 seconde et les performances restent excellentes même lors de la génération de dates d'environ 100 000 jours.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn