Calcul sur un format heure
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.
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.
-
djclem59
- Fraîchement OOthentifié
- Messages : 2
- Inscription : 30 nov. 2007 13:34
Calcul sur un format heure
Bonjour,
Je me présente je suis djclem59, je suis étudiant en 2ème année de BTS.
En ce moment je suis en stage jusque fin décembre. J'ai un projet de créer une base de données sur OpenOffice mais le soucis c'est que j'ai l'habitude de travailler avec Access pour les BDD. Jusque ici je me suis en sorti mais maintenant je bloc sur un sujet
Comment faire un calcul sur deux champs de format heure, je dois calculer une durée d'un spectacle grace à l'heure de début et à l'heure de fin. Mais quand je crée une requete, je prend les deux champs heure de début et heure de fin, ensuite je rentre la formule -- "Heure_fin" - "Heure_début" -- Il me met une erreur.
Est ce que quelqu'un saurait me dire comment faire ?
Merci d'avance.
Je me présente je suis djclem59, je suis étudiant en 2ème année de BTS.
En ce moment je suis en stage jusque fin décembre. J'ai un projet de créer une base de données sur OpenOffice mais le soucis c'est que j'ai l'habitude de travailler avec Access pour les BDD. Jusque ici je me suis en sorti mais maintenant je bloc sur un sujet
Comment faire un calcul sur deux champs de format heure, je dois calculer une durée d'un spectacle grace à l'heure de début et à l'heure de fin. Mais quand je crée une requete, je prend les deux champs heure de début et heure de fin, ensuite je rentre la formule -- "Heure_fin" - "Heure_début" -- Il me met une erreur.
Est ce que quelqu'un saurait me dire comment faire ?
Merci d'avance.
2.3.0 sous Windows XP SP1
-
jeanmimi
- Grand Maître de l'OOffice

- Messages : 17216
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Bonjour et bienvenue dans ce forum,
Comme je ne sais pas trop comment ta Requête est faite (format du champ, etc ...), je te propose de regarder cette FAQ pour illustrer comment faire :
http://wiki.services.openoffice.org/wik ... Q/Base/027
Comme je ne sais pas trop comment ta Requête est faite (format du champ, etc ...), je te propose de regarder cette FAQ pour illustrer comment faire :
http://wiki.services.openoffice.org/wik ... Q/Base/027
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
djclem59
- Fraîchement OOthentifié
- Messages : 2
- Inscription : 30 nov. 2007 13:34
-
jeanmimi
- Grand Maître de l'OOffice

- Messages : 17216
- Inscription : 03 mars 2006 16:02
- Localisation : Venise verte
Je ne sais pas si tu as progressé ...
Une recherche sur ce forum sur le terme "DATEDIFF" conduit à plusieurs messages dont un de PYS qui adresse vers cette source :
http://hsqldb.org/doc/guide/ch09.html#N124AF
Une recherche sur ce forum sur le terme "DATEDIFF" conduit à plusieurs messages dont un de PYS qui adresse vers cette source :
http://hsqldb.org/doc/guide/ch09.html#N124AF
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
-
Pierre-Yves Samyn
- Grand Maître de l'OOffice

- Messages : 11276
- Inscription : 02 mai 2006 08:42
Bonjour
Ci-joint un exemple relativement complexe pour une fonction si triviale...
J'espère qu'il y a plus simple mais je ne dois pas être inspiré car là tout de suite je ne vois pas...
Nota : les retours à la ligne sont ceux du forum (voir le fichier joint)
Explications :
http://user.services.openoffice.org/fr/ ... 093432.odb
Puisque tu travailles avec Access, sache que tu peux créer un odb se "connectant" à une base Access. Ainsi tu ne pourras bien sûr récupérer que les tables... mais l'avantage est que tu pourras y créer des requêtes (dans le fichier odb) utilisant les fonctions d'Access.
Ci-joint un exemple relativement complexe pour une fonction si triviale...
J'espère qu'il y a plus simple mais je ne dois pas être inspiré car là tout de suite je ne vois pas...
Code : Tout sélectionner
SELECT "ID_Table", "Nom", "heure début", "heure fin",
CASE
WHEN DATEDIFF('mi', "heure début", "heure fin")< 0
THEN
REPLACE(CAST(FLOOR((DATEDIFF('mi', "heure début", CAST('24:00:00' as TIME)) + DATEDIFF('mi', CAST('00:00:00' as TIME), "heure fin")) / 60.00) AS CHAR), '.0', '') || ':' ||
CAST(MOD((DATEDIFF('mi', "heure début", CAST('24:00:00' as TIME)) + DATEDIFF('mi', CAST('00:00:00' as TIME), "heure fin")) , 60) AS VARCHAR)
ELSE
CAST(DATEDIFF('mi', "heure début", "heure fin") / 60 as VARCHAR) || ':' || CAST(MOD(DATEDIFF('mi', "heure début", "heure fin") , 60) as VARCHAR)
END as "Durée"
FROM "Table1"
Explications :
- Comme tu n'évoques que les heures je pars du principe qu'il ne peut y avoir plusieurs jours entre le début et la fin.
- La fonction DATEDIFF permet de convertir en minutes la différence entre les deux heures.
- La division par 60 et la fonction MOD permettent de "ventiler" entre nombre d'heures et le nombre de minutes restant.
- Il faut prendre en compte les cas où l'on passe minuit (heure de fin plus "petite" que l'heure de début).
- Il faut diviser par 60.0 pour ne pas obtenir un arrondi supérieur (3,83 serait arrondi à 4 par exemple).
- La fonction FLOOR donne l'entier inférieur (3,83 => 3 par exemple).
- Malheureusement, la conversion en texte du résultat (fonction CAST) rajoute le zéro. La fonction REPLACE permet de le supprimer.
- L'opérateur || permet de concaténer le résultat avec le ":" entre heures et minutes.
http://user.services.openoffice.org/fr/ ... 093432.odb
Puisque tu travailles avec Access, sache que tu peux créer un odb se "connectant" à une base Access. Ainsi tu ne pourras bien sûr récupérer que les tables... mais l'avantage est que tu pourras y créer des requêtes (dans le fichier odb) utilisant les fonctions d'Access.
-
bm92
- ManitOOu

- Messages : 2562
- Inscription : 26 nov. 2005 13:42
Bonjour,
Quand tu récupères un champ de type Heure avec la fonction getTime( ) tu obtiens une structure com.sun.star.util.Time.
Exemple schématique de codage:
Il ne te reste plus qu'à faire les calculs 
Quand tu récupères un champ de type Heure avec la fonction getTime( ) tu obtiens une structure com.sun.star.util.Time.
Exemple schématique de codage:
Code : Tout sélectionner
dim h as object
resuQuery = maRequete.executeQuery(instructionSQL)
resuQuery.next
h = resuQuery.Columns.getByName("nomChamp").getTime()
' cette structure contient:
' h.Hours
' h.Minutes
' h.SecondsBernard
OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
-
Pierre-Yves Samyn
- Grand Maître de l'OOffice

- Messages : 11276
- Inscription : 02 mai 2006 08:42
-
Papayes
- Membre fOOndateur

- Messages : 4154
- Inscription : 07 déc. 2005 13:55
- Localisation : Vic-Fezensac dans le Gers
Avez-vous obtenu ce que vous cherchiez ?
Bonjour,
Merci de votre collaborationLe Modérateur a écrit :Avez-vous obtenu ce que vous cherchiez ?
Il est de bon ton d'ajouter dans le titre du premier message la balise [Résolu] lorsque votre problème a trouvé une solution.
Ceci augmente la lisibilité du forum.
Merci de respecter la syntaxe [Résolu] : entre crochets, avec un R majuscule et un é. Cette balise est à placer au début du titre.
Suivez ce sujet pour savoir comment procéder :
http://user.services.openoffice.org/fr/ ... c3299.html
"Tout ce qui n'est pas donné est perdu"