définir les valeurs d'un champ en fonction d'une soustraction - SQL/NoSQL - Programmation
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é
Marsh Posté le 30-06-2005 à 14:01:26
moi23372 a écrit : tout dépend l'SGBD que tu utiles |
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
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 ?
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... |
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...
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?
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.
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 ?
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! |
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)
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
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.
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
Marsh Posté le 01-07-2005 à 16:20:41
Je comprends rien à ton truc
(YEAR(vidate)-YEAR(padatenaiss)) - (RIGHT(vidate,5)<RIGHT(padatenaiss,5)) as viagepat
Pkoi tu fais pas simplement :
(YEAR(vidate-padatenaiss)) as viagepat ?
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
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
@+