Générer des dates sur plusieurs plages de dates
Générer des dates entre deux dates données est une tâche courante en SQL. Cependant, générer des dates sur plusieurs plages de dates peut présenter des défis.
Considérez le tableau d'entrée suivant contenant deux plages de dates :
| ID | START_DATE | END_DATE | |-----|------------|------------| | 101 | April, 01 2013 | April, 10 2013 | | 102 | May, 10 2013 | May, 12 2013 |
Le résultat souhaité serait une liste de dates pour chaque plage :
| ID | Dates | |-----|-------| | 101 | April, 01 2013 | | 101 | April, 02 2013 | | 101 | April, 03 2013 | | 101 | April, 04 2013 | | 101 | April, 05 2013 | | 101 | April, 06 2013 | | 101 | April, 07 2013 | | 101 | April, 08 2013 | | 101 | April, 09 2013 | | 101 | April, 10 2013 | | 102 | May, 10 2013 | | 102 | May, 11 2013 | | 102 | May, 12 2013 |
Pour y parvenir, nous pouvons utiliser la requête SQL suivante :
select A.ID, A.START_DATE+delta dt from t_dates A, ( select level-1 as delta from dual connect by level-1 <= ( select max(end_date - start_date) from t_dates ) ) where A.START_DATE+delta <= A.end_date order by 1, 2
Cette requête exploite un sous-requête pour générer une liste de décalages de date de 0 à la plage de dates maximale dans la table. Il joint ensuite cette sous-requête à la table d'entrée à l'aide de la colonne START_DATE et vérifie si chaque décalage se situe dans la plage définie par la colonne END_DATE. Les résultats sont triés par ID et les dates générées (dt).
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!