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
Libérer: 2025-01-23 17:22:13
original
235 Les gens l'ont consulté

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.

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
Copier après la connexion

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

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'
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal