#1 Tue 06 March 2012 11:15
[postgresql 8.4.5]Calcul interval entre plusieurs dates
Bonjour,
je suis à la recherche d'une méthode pour calculer un interval de date.
le probleme est le suivant :
les agents réalisent des diagnotics sur les assainissements à plusieurs dates.
date1, date2, date 3
j'aurais besoin de calculer la date de la prochaine visite dans 4 ans/
j'arrive à mon résultat de cette manière pour une colonne :
Code:
select (date1::date + '4 years'::interval)::date as date_prochaine_visite from spanc order by date ;
Cependant, le probleme se complique car je souhaite connaitre la date de la prochaine visite si la date3 est rempli sinon utiliser la date2 sinon utiliser la date1
j'ai tenté la requete suivante à l'aveuglette :
Code:
select case when date3 IS NOT NULL THEN (date3::date + '4 years'::interval) when date2 IS NOT NULL THEN (date2::date + '4 years'::interval) ELSE (date1::date + '4 years'::interval) END from spanc;
syntaxe en entrée invalide pour le type date
Merci d'avance pour votre proposition de méthode
Gwen
Dernière modification par gwen (Tue 06 March 2012 11:16)
Hors ligne
#2 Tue 06 March 2012 12:34
Re: [postgresql 8.4.5]Calcul interval entre plusieurs dates
Bonjour Gwen,
je viens de tester ta syntaxe sur une version identique de postgresql et je n'ai pas d'erreur.
Tu peux utiliser aussi la fonction COALESCE qui retourne la première valeur non nulle :
Code:
SELECT COALESCE(date_3,date_2,date_1)::date + '4 years'::interval FROM spanc;
Mathieu
Dernière modification par Mathieu BOSSAERT (Tue 06 March 2012 12:35)
Mathieu BOSSAERT
Association GeoRezo
Hors ligne
#3 Tue 06 March 2012 12:35
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [postgresql 8.4.5]Calcul interval entre plusieurs dates
Bonjour,
je suis à la recherche d'une méthode pour calculer un interval de date.
le probleme est le suivant :
les agents réalisent des diagnotics sur les assainissements à plusieurs dates.
date1, date2, date 3
j'aurais besoin de calculer la date de la prochaine visite dans 4 ans/
j'arrive à mon résultat de cette manière pour une colonne :Code:
select (date1::date + '4 years'::interval)::date as date_prochaine_visite from spanc order by date ;Cependant, le probleme se complique car je souhaite connaitre la date de la prochaine visite si la date3 est rempli sinon utiliser la date2 sinon utiliser la date1
j'ai tenté la requete suivante à l'aveuglette :Code:
select case when date3 IS NOT NULL THEN (date3::date + '4 years'::interval) when date2 IS NOT NULL THEN (date2::date + '4 years'::interval) ELSE (date1::date + '4 years'::interval) END from spanc;syntaxe en entrée invalide pour le type date
Merci d'avance pour votre proposition de méthode
Gwen
Bonjour,
Le principe que vous utilisez semble correct. L'erreur ne vient-elle pas d'un des champs date qui n'aurait pas la bonne forme et ne pourrait pas etre "casté" en date ?
Quel sont les types de ces champs date ?
Que donne simplement un
Code:
select date1::date, date2::date, date3::date, date4::date from spanc
Nicolas
Hors ligne
#4 Tue 06 March 2012 14:37
Re: [postgresql 8.4.5]Calcul interval entre plusieurs dates
Merci les gars,
En effet, je force le passage avec du character varying !!! je pense qu'il est temps de passer à la conversion de ces champs en date.
je vais procéder aux modifications et je vous tiens au courant.
Hors ligne