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>
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>
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!