Maison > base de données > tutoriel mysql > Comment générer toutes les dates dans plusieurs plages de dates en SQL ?

Comment générer toutes les dates dans plusieurs plages de dates en SQL ?

Mary-Kate Olsen
Libérer: 2025-01-05 16:11:43
original
816 Les gens l'ont consulté

How to Generate All Dates Within Multiple Date Ranges in SQL?

Générer des dates dans plusieurs plages de dates

Lorsque l'exigence s'étend au-delà d'une seule plage de dates, générer toutes les dates dans plusieurs plages de dates présente un défi . Cet article aborde de tels scénarios et propose une solution efficace.

Le problème

Comme illustré dans le SQL Fiddle fourni, la tâche consiste à générer toutes les dates pour un ensemble donné. de plusieurs plages de dates, comme suit :

<br>ID START_DATE END_DATE<br>101 1er avril 2013 10 avril 2013<br>102 10 mai 2013 12 mai 2013<br>

La solution

La requête suivante répond à ce problème problème :

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

Décomposition de la solution

  • La sous-requête crée une structure hiérarchique (en utilisant CONNECT BY) pour générer une séquence de nombres jusqu'au durée maximale des plages de dates.
  • La requête principale joint cette séquence aux plages de dates d'entrée, en ajoutant les numéros de séquence au début dates pour générer toutes les dates possibles.
  • La clause WHERE garantit que seules les dates valides dans chaque plage sont générées.
  • La clause ORDER BY trie la sortie par ID puis par date.

Exemple de sortie

Pour l'entrée fournie, la requête renvoie ce qui suit sortie :

<br>Dates d'identification<br>101 avril 01 2013<br>101 avril 02 2013<br>101 avril 03 2013<br>101 avril 04 2013<br>101 avril, 05 2013<br>101 avril 06 2013<br>101 avril 07 2013<br>101 avril 08 2013<br>101 avril 09 2013<br>101 avril 10 2013<br>102 mai 10 2013<br>102 mai 11 2013<br>102 mai 12 2013<br>

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