[Résolu]Différences de deux dates

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.

[Résolu]Différences de deux dates

Messagepar celine2512 » 25 Août 2007 21:06

Bonjour,

j'ai regardé tous les messages sur ce sujet, mais rien n'y fait :( je ne comprends pas ou les exemples ne correspondent pas.:oops:

En effet je souhaite faire la différence entre deux dates de la forme (dd/mm/yyyy) et obtenir un résulat date sous la forme (dd/mm/yy)
Il faut faire une requête SQL avec DAteDIff mais impossible d'obtenir le résultat sous la forme demandée.
Quel calcul pourrais je faire ??

Merci beaucoup
Dernière édition par celine2512 le 27 Août 2007 12:09, édité 1 fois.
Celine Open Office 2.2.0 sous WIN XP
celine2512
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 20 Juil 2007 20:20

Re: Différences de deux dates

Messagepar Pierre-Yves Samyn » 26 Août 2007 11:50

Bonjour

celine2512 a écrit:j'ai regardé tous les messages sur ce sujet, mais ...les exemples ne correspondent pas...


Je ne partage pas tout à fait ce point de vue car d'autres fils ont abordé la question.

Celui-ci où je montre comment calculer le nombre d'années en tenant compte de la date anniversaire.

Ou encore Celui-ci
dans lequel j'indique la fonction, la documentation...
et où je renonce faute de temps et d'enthousiasme... :)

Il faut dire que ceci prend un certain temps à rédiger :

Code : Tout sélectionner   AgrandirRéduire
SELECT "DateNaissance", "Nom", YEAR(now())-YEAR("DateNaissance")-

case
   when (             MONTH( NOW() ) < MONTH("DateNaissance")                       OR            (        MONTH( NOW() ) = MONTH("DateNaissance") AND DAY( NOW() ) < DAY ("DateNaissance")     )                   )
   then 1
   else    0
end as "ans",

MONTH(NOW())-MONTH("DateNaissance") +

case
   when MONTH(now()) <= MONTH("DateNaissance") AND day(now()) < day("DateNaissance")
   then 11
   else
         case
         when MONTH(now()) < MONTH("DateNaissance") AND day(now()) >= day("DateNaissance")
         then 12
         else
               case
               when MONTH(now()) > MONTH("DateNaissance") AND day(now()) < day("DateNaissance")
               then -1
               else 0
               end
         end
end as "mois",

datediff('DAY',
cast(
year(now()) || '-' || month(now()) -

case
   when day(now()) < day("DateNaissance")
   then 1
   else 0
end || '-' || day("DateNaissance")

as DATE) , now() )

as "jours"

FROM "Table1"




Alors voila un exemple tout fait...

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/08/26-124837.odb
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Messagepar celine2512 » 26 Août 2007 19:49

Merci beaucoup c'est tout a fait ca !

J'ai une table Administrés et dans cette table je fais donc la soustraction des dates qui marchent maintenant tres bien. Par contre je voudrais que le résultat de cette requete soit liée dans le formulaire Administré et qu'il concerne uniquement l'administré en cours. (et non comme actuellement tous les administrés de la table)

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/08/26-084139.odb

Ci joint ma BDD

La requete se nomme : Req_DureeServiceMil elle calcule la différence entre les champs date DateDebutServiceMilitaire et DateFInServiceMilitaire

J'ai essaye de l'associé dans le formulaire Administres en créant un sous formulaire mais impossible de faire un tri sur la requete pour afficher le résultat pour l'administré en cours.

OU sinon comment lier le résultat à un champ de la table Administré (ici, ca serait DureeServgiceMilitaire)

Désolée de demander tant de conseils !

Merci encore si vous pouvez jeter un coup d'oeil
Celine Open Office 2.2.0 sous WIN XP
celine2512
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 20 Juil 2007 20:20

Messagepar Pierre-Yves Samyn » 27 Août 2007 09:35

Bonjour

Je n'ai regardé que ta table Administre... (rapidement )

Puisque tu souhaites quelques conseils je me permets ces quelques remarques préliminaires :

  • Un premier réflexe pour ce genre de projets devrait être : est-ce qu'une application similaire n'existe pas déjà (autre collectivité, autre administration) ?
  • L'utilisation du numéro de sécurité sociale est soumis à des règles strictes (CNIL)
  • Ne pas stocker dans la base des résultats de calcul (sauf cas particuliers...). Puisqu'on peut "calculer" à quoi bon enregistrer ?
  • Tu ne prévois qu'un seul "Tel", s'il s'agit du numéro "perso" ?
  • Les informations relatives au service militaire ne concernent (a priori...) que les hommes et pourraient donc être dans une table liée.


Ceci me semble un projet conséquent, évidemment professionnel, et je n'ai pas le recul suffisant pour être certain que HSQL soit adapté.

Bon... trève de litote : je pense que HSQL n'est pas adapté :)

Pour répondre maintenant plus précisément à la question :

L'exemple joint comprend un formulaire simplifié mettant en liaison la table Administre et une Vue_SM (euh... service militaire...:D) via un sous-formulaire.

Je n'ai pas mis de contrôle "Table" dans la mesure où je pense qu'il n'y a pas plusieurs lignes par administré.

J'utilise une vue car avec une requête le lien ne s'actualise pas lors du changement d'enregistrement.

Avec ce système, pas nécessaire d'utiliser un filtre, ni un paramètre dans la requête (par parenthèse ce type de requête nécessite une exécution SQL directe empêchant la saisie de paramètre).

Tout ceci encore une fois pour mettre en liaison le résultat "calculé" avec le numéro de sécu. Si tu veux quand même enregistrer dans la base, il faudra t'orienter vers des requêtes de mise à jour ou une macro.

Voir ici pour des exemples de requêtes

http://user.services.openoffice.org/fr/ci-joint/fichier/2007/08/27-103354.odb
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Messagepar celine2512 » 27 Août 2007 12:05

Super merci j'ai étudié votre exemple et je vais m'en inspirer. Merci également pour les conseils :)

Une petite question encore je n'ai pas compris comment d'une requête SQL avez vous pu créer la vue_SM dont vous parlez ?
Celine Open Office 2.2.0 sous WIN XP
celine2512
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 20 Juil 2007 20:20

Messagepar celine2512 » 27 Août 2007 12:08

celine2512 a écrit:Super merci j'ai étudié votre exemple et je vais m'en inspirer. Merci également pour les conseils :)

Une petite question encore je n'ai pas compris comment d'une requête SQL avez vous pu créer la vue_SM dont vous parlez ?


Ok je viens de voir clic droit sur le requete créer une vue :)
Celine Open Office 2.2.0 sous WIN XP
celine2512
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 20 Juil 2007 20:20

Messagepar Pierre-Yves Samyn » 27 Août 2007 18:01

celine2512 a écrit:clic droit sur le requete créer une vue

Oui, ou si on souhaite apporter des modifications :
  • Clic droit sur la requête
  • Editer en mode SQL
  • Sélectionner puis copier le texte
  • Fermer
  • Afficher les tables, cliquer sur Créer une vue
  • Cliquer sur fermer (on n'ajoute pas les tables via cet outil)
  • Désactiver le mode Ebauche en cliquant sur l'équerre dans la barre d'outils
  • Coller le texte
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

Messagepar Philippe BRONCHART » 04 Sep 2007 20:42

Bonsoir céline,

je pense être dans la même "partie" que toi.

Sincèrement en matière d'administration de ce type de personnel, tu vas devenir folle avec base.

Une base, c'est pratique pour saisir,organiser, trier, extraire des données ... Mais alors pour calculer ... ( si je te parle de date rectifiée tu vas comprendre)

Sincèrement je rejoins Pierre-Yves. Ingérable ton histoire ... sauf avec un tableur.

J'ai des tas "d'appliquettes" dans ce domaine, essentiellement sous calc. Si je peux aider ...
Amicalement Philippe BRONCHART

Win 10 Libre office 5.0 (perso)
Philippe BRONCHART
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 244
Inscrit le : 17 Jan 2007 20:18
Localisation : Lille(59) - Lesboeufs (80)

Messagepar celine2512 » 05 Sep 2007 13:02

Philippe BRONCHART a écrit:Bonsoir céline,

je pense être dans la même "partie" que toi.

Sincèrement en matière d'administration de ce type de personnel, tu vas devenir folle avec base.

Une base, c'est pratique pour saisir,organiser, trier, extraire des données ... Mais alors pour calculer ... ( si je te parle de date rectifiée tu vas comprendre)

Sincèrement je rejoins Pierre-Yves. Ingérable ton histoire ... sauf avec un tableur.

J'ai des tas "d'appliquettes" dans ce domaine, essentiellement sous calc. Si je peux aider ...


Merci pour ta remarque, en fait je suis totalement novice dans open office et c'est vrai que c est un projet qui n'est à la base pas trop compatible avec la base Open Office mais on m'a demandé de le réaliser comme ceci. Donc je m'efforce d'essayer de trouver des solutions. et n'y connaissant rien en Macros c'est pas simple :)

Bon courage à toi aussi :)
Celine Open Office 2.2.0 sous WIN XP
celine2512
NOOuvel adepte
NOOuvel adepte
 
Message(s) : 16
Inscrit le : 20 Juil 2007 20:20


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 4 invité(s)