Maison >base de données >tutoriel mysql >Comment générer efficacement une plage de dates en 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!