Date de naissance en SQL

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Avatar de l’utilisateur
Pascreu
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 juin 2007 06:55
Localisation : Creuse (23)

Date de naissance en SQL

Message par Pascreu »

Bonjour,

je n'arrive pas à traduire cette formule en SQL

Age=(ANNEES(DtNaiss; MAINTENANT();0)) & "a " & (NB.MOIS(DtNaiss;
MAINTENANT();0) - (ANNEES(DtNaiss; MAINTENANT(); 0))*12) & "m " &
(SI(JOUR(MAINTENANT()) - JOUR(DtNaiss) >=0; JOUR(MAINTENANT()) -
JOUR(DtNaiss); JOUR(MAINTENANT()) + (JOURSDANSMOIS(MOIS.DECALER
(MAINTENANT(); -1)) - JOUR(DtNaiss)))) & "j"

je voudrais l'age en : jours – mois – années.

merci
OO.o 3.3.0 sous Windows XP pro SP3
OO.o 3.3.0 sous Windows Vista
LibreOffice 3.3.0 sous Windows Vista
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Bonjour

Voir ce fil pour un exemple de manipulation des fonctions :

http://user.services.openoffice.org/fr/ ... -cast.html
Avatar de l’utilisateur
Pascreu
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 juin 2007 06:55
Localisation : Creuse (23)

Message par Pascreu »

j'ai vu le code mais je n'arrive pas à l'adapter

amicalement :cry:
OO.o 3.3.0 sous Windows XP pro SP3
OO.o 3.3.0 sous Windows Vista
LibreOffice 3.3.0 sous Windows Vista
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Le problème est bien sûr l'enchaînement de calculs... Dans une requête ce n'est guère pratique.

La fonction :
DATEDIFF(string, datetime1, datetime2)
returns the count of units of time elapsed from datetime1 to datetime2. The string indicates the unit of time and can have the following values 'ms'='millisecond', 'ss'='second','mi'='minute','hh'='hour', 'dd'='day', 'mm'='month', 'yy' = 'year'. Both the long and short form of the strings can be used.



cf. la documentation

devrait permettre d'arriver au résultat...

Cela dit, ce serait plus simple par macro..., et j'avoue ne pas avoir ni le temps ni le courage de compléter ma requête précédente :)
Avatar de l’utilisateur
Pascreu
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 juin 2007 06:55
Localisation : Creuse (23)

Message par Pascreu »

la fonction DATEDIFF en SQL avec "yy" pour la date 26/12/93 est fausse.
OO.o 3.3.0 sous Windows XP pro SP3
OO.o 3.3.0 sous Windows Vista
LibreOffice 3.3.0 sous Windows Vista
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Pour moi elle donne le bon résultat sachant qu'elle ne fait que l'équivalent de:

Code : Tout sélectionner

 year(CURRENT_DATE)-year("DateNaissance")
Image
Avatar de l’utilisateur
Pascreu
Membre lOOyal
Membre lOOyal
Messages : 35
Inscription : 16 juin 2007 06:55
Localisation : Creuse (23)

Message par Pascreu »

bonjour,

le résultat n'est pas bon pour la date 26/12/93 "yy" = 14 et non 13 car "mm"= 6 etc...

amicalement :(
OO.o 3.3.0 sous Windows XP pro SP3
OO.o 3.3.0 sous Windows Vista
LibreOffice 3.3.0 sous Windows Vista
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

Oui j'avais compris :D

Mais :

Code : Tout sélectionner

2007-1993 = 14
C'est ce que fait DateDiff et donc pour moi le résultat est bon.

En revanche, je suis d'accord que cela ne donne pas ce que tu espéres à savoir la prise en compte du nombre de mois...