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

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 :

SELECT ... AS days WHERE `date` BETWEEN '2010-01-20' AND '2010-01-24'
Copier après la connexion

Le résultat attendu est :

<code>days
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24</code>
Copier après la connexion

Solution de sous-requête efficace

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

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

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