Maison > base de données > tutoriel mysql > Comment générer une liste de dates dans une plage spécifique sans boucles ni tableaux temporaires ?

Comment générer une liste de dates dans une plage spécifique sans boucles ni tableaux temporaires ?

Linda Hamilton
Libérer: 2025-01-23 17:07:10
original
925 Les gens l'ont consulté

How to Generate a List of Dates Within a Specific Range Without Loops or Temporary Tables?

Générer une date à partir d'une plage de dates

Une tâche courante dans l'analyse des données consiste à extraire une date spécifique d'une plage de dates donnée. Par exemple, vous devrez peut-être récupérer les dates du « 20/01/2010 » au « 24/01/2010 ».

Solution sans boucles ni tables temporaires

Pour y parvenir sans utiliser de boucles, de procédures ou de tables temporaires, nous pouvons exploiter 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>
Copier après la connexion

Cette sous-requête génère une série de dates s'étendant sur environ 10 000 jours. Vous pouvez ajuster le nombre de jours en élargissant ou en réduisant la plage dans la sous-requête.

Sortie

La requête renvoie les dates suivantes :

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

Notes de performances

Les performances de cette requête sont très bonnes, s'exécutant en 0,0009 seconde sur une plage de 5 jours. Même avec une autonomie de 100 000 jours, l’opération se déroule en seulement 0,0458 seconde.

Compatibilité et portabilité

Cette technologie est compatible avec la plupart des bases de données avec seulement des ajustements mineurs. Par exemple, vous souhaiterez peut-être remplacer la fonction CURDATE() par la fonction correspondante dans votre base de données spécifique.

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!

source:php.cn
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