Gestion de plusieurs plages de dates pour la génération de dates
La génération de dates entre deux dates est couramment rencontrée dans divers scénarios de programmation. Bien que générer des dates pour une seule plage soit simple, étendre cette fonctionnalité pour gérer plusieurs plages peut poser des problèmes.
Considérez le tableau suivant où chaque ligne représente une plage de dates :
ID | START_DATE | END_DATE |
---|---|---|
101 | April 1, 2013 | April 10, 2013 |
102 | May 10, 2013 | May 12, 2013 |
Le nombre attendu la sortie doit générer des dates individuelles dans chaque plage :
ID | Dates |
---|---|
101 | April 1, 2013 |
101 | April 2, 2013 |
... | ... |
101 | April 10, 2013 |
102 | May 10, 2013 |
102 | May 11, 2013 |
102 | May 12, 2013 |
Oracle fournit une solution ingénieuse pour y parvenir résultat :
select A.ID, A.START_DATE + (delta - 1) 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 - 1) <= A.end_date order by 1, 2;
La colonne delta utilise la hiérarchie CONNECT BY d'Oracle pour générer une séquence d'entiers allant de 1 jusqu'à la différence maximale entre les dates de fin et de début dans la table. L'expression A.START_DATE (delta - 1) incrémente la date de début du delta approprié pour chaque enregistrement dans les résultats. La clause WHERE filtre les résultats qui dépassent la date de fin de la plage de dates actuelle.
Profitez de cette solution élégante pour générer des dates sur plusieurs plages dans Oracle !
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!