Calcul sur un format heure

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.
djclem59
Fraîchement OOthentifié
Messages : 2
Inscription : 30 nov. 2007 13:34

Calcul sur un format heure

Message par djclem59 »

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.
2.3.0 sous Windows XP SP1
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17216
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

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
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
djclem59
Fraîchement OOthentifié
Messages : 2
Inscription : 30 nov. 2007 13:34

Message par djclem59 »

Merci pour le lien mais je fais comme c'est montré dans l'exemple mais il me met une erreur qui dit
"Impossible de charger le contenu des données, Wrong data type ...."

Je ne sais pas si c'est ma version qui bug ou si il y a un problème dans ma table.
2.3.0 sous Windows XP SP1
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 17216
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Message par jeanmimi »

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
LibreOffice : Version : 25.8.4 (x64)(23 février 2026)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
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

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"

Nota : les retours à la ligne sont ceux du forum (voir le fichier joint)

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
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Message par bm92 »

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:

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.Seconds
Il ne te reste plus qu'à faire les calculs :wink:
Bernard

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
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 08:42

Message par Pierre-Yves Samyn »

bm92 a écrit :Quand tu récupères un champ de type Heure avec la fonction getTime( ) tu obtiens une structure com.sun.star.util.Time.
Euh... oui mais
djclem59 a écrit :... quand je crée une requete...


et nous ne sommes pas dans la rubrique "macro"

Cela dit... c'est quand même plus simple :)
Avatar de l’utilisateur
Papayes
Membre fOOndateur
Membre fOOndateur
Messages : 4154
Inscription : 07 déc. 2005 13:55
Localisation : Vic-Fezensac dans le Gers

Avez-vous obtenu ce que vous cherchiez ?

Message par Papayes »

Bonjour,
Le 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
Merci de votre collaboration
"Tout ce qui n'est pas donné est perdu"