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

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