Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2883 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Orcale : Récupérer toutes jours entre deux dates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Orcale : Récupérer toutes jours entre deux dates

n°1260979
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-12-2005 à 14:25:39  profilanswer
 

Imaginez :
 
Mon patron à un problème : il veut récupérer toutes les dates comprises entre une date et une autre.
 
Moyen simple que j'ai trouvé :
 
Créer une table "compteur" contenant :
 
valeur
1
2
3
4
5
...
100
 
(on peut aller plus loin que 100 mais là ça suffit)
 
Puis faire :
 

Code :
  1. select :datdeb + (valeur - 1) jour
  2. from compteur
  3. where :datdeb + (valeur - 1) between :datdeb and :datfin


 
Bon, ça marche sans problème.
Seulement, c'est pas super propre.
Est-ce qu'on peut trouver un autre moyen ?
 
Evidement, on peut se passer de cette table compteur et utiliser rownum sur une table contenant assez de lignes, m'enfin c'est pas mieu (et encore moins lisible :D)
 
Via une fonction récursive (mais j'ai pas la synaxe en tête, voici la syntaxe SQL Server)
 

Code :
  1. create function getJours(@datdeb as datetime, @datfin as datetime, @curindex as integer)
  2. returns table
  3. as
  4. begin
  5.    if datediff(d, @datfin, @datdeb) < @curindex
  6.    begin
  7.       return (
  8.       select dateadd(d, @datdeb, @curindex)
  9.       union
  10.       select * from getJours(@datdeb, @datfin, @curindex + 1)
  11.       )
  12.    end
  13.    else
  14.    begin
  15.       return (select dateadd(d, @datdeb, @curindex))
  16.    end
  17. end
  18. go
  19. select *
  20. from getJours(@datdeb, @datfin, 0)
  21. go


 
(grossomodo, à priori, ça marche pas, mais c'est presque ça :D)
sauf que... bah on est limité en niveau de récursivité à 20 ou 30 occurences avec SQL Server, et Oracle a une limite assez proche, donc ça peut pas marcher dans tous les cas...

mood
Publicité
Posté le 07-12-2005 à 14:25:39  profilanswer
 

n°1261022
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-12-2005 à 15:23:07  profilanswer
 

je sais bien que c'est l'heure de la digestion mais bon :o

n°1261026
Beegee
Posté le 07-12-2005 à 15:24:12  profilanswer
 

En effet, le plus simple est d'utiliser rownum dans une grosse table :
 

Code :
  1. SELECT TO_DATE(date_de_debut)+rownum-1
  2. FROM all_objects
  3. WHERE rownum <= TO_DATE(date_de_fin) - TO_DATE(date_de_debut) + 1;

n°1261081
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-12-2005 à 15:46:50  profilanswer
 

hmmmmm. je crois je vais me cantonner à utiliser la table "compteur".
 
ou alors à la limite une fonction qui tape dans "all_objects"
 
mais sinon... ça me semble un peu gore de mettre "all_objects" dans une requête alors que c'est pour récupérer une liste de jours :D je suis pas sûr que le gars qui va faire la maintenance derrière comprenne quoi que ce soit ;)

n°1261105
Beegee
Posté le 07-12-2005 à 16:08:46  profilanswer
 

Ajoute un commentaire :D
 
(au fait, t'es toujours si fâché avec Oracle que tu ne sais même pas écrire ces 6 lettres dans le bon ordre ? :lol: )

n°1261181
Arjuna
Aircraft Ident.: F-MBSD
Posté le 07-12-2005 à 17:23:57  profilanswer
 

ben... on peut dire comme ça...
 
pas réussi à faire une fonction qui retourne une table... il sait vraiment pas faire ou quoi ?
 
seul truc que j'ai trouvé, c'est retourner une collection d'un datatype utilisateur, mais ça ne marche pas chez moi... c'est bizance !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Orcale : Récupérer toutes jours entre deux dates

 

Sujets relatifs
[xml] récupérer tout le texte d'un élement ?[Eclipse/CVS] Comment récupérer le nom de la branche avant le commit ?
récupérer une variable VBSCRIPT dans une page ASPrécupérer le code source page Web https..(dhtml, javascript) avec vba?
Récupérer les infos d'un fichier txt en batchRécupérer le dernier post d'un sujet
Récupérer le chemin d'un dossier cherchéRécupérer la première lettre d'une variable en batch?
Récupérer le texte affiché dans un comoboxrecuperer données de tableau dans mail
Plus de sujets relatifs à : Orcale : Récupérer toutes jours entre deux dates


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR