Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/02/2008, 19h16   #1
Invité régulier
 
Inscription : novembre 2005
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 46
Points : 7
Points : 7
Par défaut Petit problème d'addition de type 'time'

Bonjour, dans PSQL 8.2.6, quand j'exécute la requête suivante:
Code :
SELECT et.nom,ed.heure FROM Groupe g INNER JOIN Edt ed ON ed.groupe=g.idGroupe INNER JOIN Etudiants et ON et.groupe=g.idGroupe WHERE ed.jour='27/02/2008' AND ((ed.heure+ed.duree)<'10:00:00');
J'obtiens:
Code :
1
2
3
4
5
 
ERREUR:  L'op&#65533;rateur n'est pas UNIQUE : time without time zone + time without time zone
LIGNE 1 : ...idGroupe WHERE ed.jour='27/02/2008' AND ((ed.heure+ed.duree)...
                                                               ^
ASTUCE : n'a pas pu choisir un meilleur candidat pour l'op&#65533;rateur. Vous devez ajouter une conversion explicite de type.
Je ne sais pas comment faire car si je fais une requête plus simple je n'ai pas de problème particulier:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
SELECT et.nom,ed.heure FROM Groupe g INNER JOIN Edt ed ON ed.groupe=g.idGroupe INNER JOIN Etudiants et ON et.groupe=g.idGroupe WHERE ed.jour='27/02/2008' AND (ed.duree<'10:00:00');
     nom      |  heure   
--------------+----------
 Coucou       | 08:15:00
 Coucou1      | 08:15:00
 Coucou2      | 08:15:00
 Coucou3      | 08:15:00
 Coucou4      | 08:15:00
 Etudiant1    | 10:15:00
 Etudiant1    | 08:15:00
 Etudiant2    | 10:15:00
 Etudiant2    | 08:15:00
 Etudiant3    | 10:15:00
 Etudiant3    | 08:15:00
 Etudiant4    | 10:15:00
 Etudiant4    | 08:15:00
 Etudiant5    | 10:15:00
 Etudiant5    | 08:15:00
 Pourquoi pas | 13:15:00
 Encore un    | 13:15:00
 Encore deux  | 13:15:00
Je précise 'edt.duree' et 'edt.heure' sont du type time.

Merci d'avance pour votre aide
MDiabolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 11h39   #2
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 33
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 33
Points : 29
Points : 29
Il n'existe pas d'opérateur + entre 2 éléments de type time (abrégé de time without time zone). PostgreSQL essai un cast implicite et trouve différents opérateurs possibles en modifiant le type d'un des 2 coté du '+'. Comme il est incapable de choisir pour toi la bonne opération, tu dois la lui préciser.
Vu les noms que tu as choisi pour tes variables, je pense que tu ne veux additionner un time (ed.heure) avec un intervalle de temps (ed.duree).

Essaie donc de remplacer dant ta clause WHERE ((ed.heure+ed.duree)<'10:00:00') par :
Code :
1
2
 
((ed.heure::time+ed.duree::interval)<'10:00:00')
j_f_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2008, 14h42   #3
Invité régulier
 
Inscription : novembre 2005
Messages : 46
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 46
Points : 7
Points : 7
Bonjour,

En effet c'était ça le problème. Merci beaucoup.
MDiabolo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h29.


 
 
 
 
Partenaires

Hébergement Web