Maison >base de données >tutoriel mysql >Comment puis-je générer efficacement une séquence de dates dans une plage spécifique en SQL ?

Comment puis-je générer efficacement une séquence de dates dans une plage spécifique en SQL ?

DDD
DDDoriginal
2025-01-23 17:17:14991parcourir

How Can I Efficiently Generate a Sequence of Dates Within a Specific Range in SQL?

Méthode efficace pour générer une plage de dates SQL

Dans la programmation de bases de données, générer une séquence de dates dans une plage de dates spécifique est une tâche courante. Par exemple, interrogez les dates entre le 20 janvier 2010 et le 24 janvier 2010 :

<code class="language-sql">SELECT ... AS days WHERE `date` BETWEEN '2010-01-20' AND '2010-01-24'</code>

Le résultat attendu est :

<code>days
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24</code>

Solution de sous-requête efficace

Une solution efficace consiste à utiliser une sous-requête pour générer une séquence de dates :

<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 (
        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
) a
WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24'</code>

Considérations relatives aux performances

Cette solution est extrêmement performante, avec un temps d'exécution des requêtes de seulement 0,0009 seconde. Même en générant 100 000 dates (environ 274 ans), le temps d'exécution de la requête n'est que de 0,0458 seconde.

Portabilité

Cette technologie est hautement portable et peut être adaptée à la plupart des systèmes de bases de données avec seulement des ajustements mineurs.

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