définir les valeurs d'un champ en fonction d'une soustraction

définir les valeurs d'un champ en fonction d'une soustraction - SQL/NoSQL - Programmation

Marsh Posté le 30-06-2005 à 11:38:09    

je ne sais pas si je me suis bien fais comprendre
mais en fait j'ai plusieurs tables dont une qui s'apelle patient et une autre visite
dans la table visite, il y'a un champ Vidate(Date de la visite) et Viagepat(Age du patient à la visite)
dans la table patient il y'a la padatenaiss(date de naissance du patient)
y'a t'il une requete permettant de calculer viagepat (vidate-padatenaiss)?
merci
@+

Reply

Marsh Posté le 30-06-2005 à 11:38:09   

Reply

Marsh Posté le 30-06-2005 à 12:08:01    

tout dépend l'SGBD que tu utiles
 
sous oracle tu peux faire:  
 
SELECT EXTRACT (YEAR FROM SYSDATE) - EXTRACT (YEAR FROM padatenaiss)
FROM DUAL;
 
pour les autres ça doit existe aussi! suffit de soustraire de l'année courante l'année de naissance du patient!
si tu veux être plus précis, tu peux le faire aussi, mais ça devient légèrement plus compliqué

Reply

Marsh Posté le 30-06-2005 à 12:20:08    

dak je vais essayer ça tout a l'heure merci

Reply

Marsh Posté le 30-06-2005 à 14:01:26    

moi23372 a écrit :

tout dépend l'SGBD que tu utiles
 
sous oracle tu peux faire:  
 
SELECT EXTRACT (YEAR FROM SYSDATE) - EXTRACT (YEAR FROM padatenaiss)
FROM DUAL;
 
pour les autres ça doit existe aussi! suffit de soustraire de l'année courante l'année de naissance du patient!
si tu veux être plus précis, tu peux le faire aussi, mais ça devient légèrement plus compliqué


 
Es-tu sûr que ce soit de l'ORACLE... Je ne connais pas cette syntaxe et en plus, tu ne lui dis pas dans quelle table aller chercher padatenaiss. Je suis plus que sceptique...
 
J'essaierais plutôt ça:
   select to_number(to_char(Vidate,'YYYY'))-to_number(to_char(padatenaiss,'YYYY')) from visite,patient where visite.idpat = patient.idpat

Reply

Marsh Posté le 30-06-2005 à 14:11:17    

c'est une base de donnée Mysql est-ce possible de faire la requête ?

Reply

Marsh Posté le 30-06-2005 à 14:13:10    

pouyotte a écrit :

Es-tu sûr que ce soit de l'ORACLE... Je ne connais pas cette syntaxe et en plus, tu ne lui dis pas dans quelle table aller chercher padatenaiss. Je suis plus que sceptique...
 
J'essaierais plutôt ça:
   select to_number(to_char(Vidate,'YYYY'))-to_number(to_char(padatenaiss,'YYYY')) from visite,patient where visite.idpat = patient.idpat


 
bien sure que c'est de l'oracle je peux te le certifier!
 
effectivement j'ai fais une légère erreur dans la requête! ici comme on utilise un champ d'une table suffit de remplacer le nom de la table (DUAL) par le nom de la table du schéma relationnel en question...
 
Ta syntaxe avec un to_char et un to_number est beaucoup plus lourde que EXTRACT en oracle. Donc vaut mieux adopter extract.... sinon je pense qu'elle est juste aussi...
 
 

Reply

Marsh Posté le 30-06-2005 à 14:15:46    

j'ai pas un sgbd aussi évolué lol
est-ce possible de realiser la requete avec mysql?

Reply

Marsh Posté le 30-06-2005 à 15:30:56    

oui bien sure! mais perso je ne connais pas la syntaxe des fonctions permettant de manipuler les dates!
 
il te suffit simplement de trouver la fonction qui permet à partir d'une date d'extraire l'année! ensuite suffira de faire la soustraction.

Reply

Marsh Posté le 30-06-2005 à 23:42:49    

update visite v
set v.viagepat = (select to_number(to_char(v.vidate - p.padatenaiss, 'YYYY')) from patient p where p.id = v.paid)
 
je suis pas sûr que l'alias "v" marche.
c'est la syntaxe Oracle, d'un SGBD à l'autre, ça peut différer
t'as vraiment des nomenclatures de merde, t'arrive à t'y retrouver ? :D

Reply

Marsh Posté le 30-06-2005 à 23:45:41    

moi23372 a écrit :

oui bien sure! mais perso je ne connais pas la syntaxe des fonctions permettant de manipuler les dates!
 
il te suffit simplement de trouver la fonction qui permet à partir d'une date d'extraire l'année! ensuite suffira de faire la soustraction.


je trouve que faire la soustraction avant est mieu, ça peut éviter les inexactitudes du genre :
 
Date naissance : 31/12/1980
Date visite : 01/01/2005
 
=> 2005 - 1980 = 25 ans
=> 01/01/2005 - 31/12/1980 = 24 ans et 1 jour - donc 24 (et c'est ça le véritable age)


Message édité par Arjuna le 30-06-2005 à 23:45:57
Reply

Marsh Posté le 30-06-2005 à 23:45:41   

Reply

Marsh Posté le 01-07-2005 à 09:59:05    

le probleme c'est que j'ai repris le travail d'un élève qui est passé avant et qui n'avait pas terminé
 
j'ai essayé :
 
update visite
set visite.viagepat = (select to_number(to_char(visite.vidate - patient.padatenaiss, 'YYYY')) from visite, patient where patient.panum = visite.panum)  
 
mais reste sans succès :(

Reply

Marsh Posté le 01-07-2005 à 11:48:56    

Oui, parceque to_number() et to_char() n'existent pas sous MySQL. Cherche les fonctions de MySQL qui te permettent de travailler avec des dates.

Reply

Marsh Posté le 01-07-2005 à 16:09:18    

voila le code qui me permet de calculer l'age en fonction de la date des visites et de la date de naissance :
 
select pa.panum, padatenaiss, vidate, (YEAR(vidate)-YEAR(padatenaiss)) - (RIGHT(vidate,5)<RIGHT(padatenaiss,5)) as viagepat
from patient pa, visite vi  
where pa.panum=vi.vinum
 
maintenant que la reqete est la comment je fais pour mettre à jour tous les enregistrement avec un update. je cherches et je ne trouves pas

Reply

Marsh Posté le 01-07-2005 à 16:20:41    

Je comprends rien à ton truc :D
 
(YEAR(vidate)-YEAR(padatenaiss)) - (RIGHT(vidate,5)<RIGHT(padatenaiss,5)) as viagepat
 
Pkoi tu fais pas simplement :
 
(YEAR(vidate-padatenaiss)) as viagepat ?


Message édité par Arjuna le 01-07-2005 à 16:21:01
Reply

Marsh Posté le 01-07-2005 à 16:45:36    

pour qu'il puisse calculer l'age exact par exemple s'il est sur sa 20eme année et qu'il ne les a pas atteint il affichera 19

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed