IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Stocker un nombre d'heures hebdo : datetime ou decimal ?


Sujet :

Langage SQL

  1. #1
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut Stocker un nombre d'heures hebdo : datetime ou decimal ?
    Quelle ne fut pas ma surprise quand j'ai découvert que le type TIME de SQL ne pouvait pas dépasser 24 heures...

    Je voudrais stocker dans une colonne un nombre d'heure hebdo (35h, 37h30, etc.)

    Le type TIME me séduisait bien, surtout que je vais devoir faire des requêtes en liaison avec des dates. Mais voilà, arrivé à 24h, ça me jette.

    Du coup, je me dit "bon, ben va pour un DATETIME, dans lequel je ne vais pas mettre de mois et année...".
    Sauf que là, le mois 0 de l'année 0 (et éventuellement le jour 0 pour les contrats de moins de 24 heures), ça marche pas non plus.

    Et calculer à partie du 01/01/1900 ça me semble casse-tête chinois à l'avance...

    Une solution ?

    Du coup j'ai peur de devoir me replier sur DECIMAL (je veux pas entendre parler de FLOAT qui fait des erreurs d'arrondi, et INT c'est pas possible en raison de la présence de décimaux).
    Sauf que DECIMAL n'est pas vraiment réputé pour ses performances.

    Reste la solution de prendre un INT et multiplier par 60 pour gérer non pas en heures mais en minutes... Mais c'est pas super propre je trouve, et guère moins casse-tête que la solution à base de DATETIME.

    Une meilleure idée ?

    Pour info, je suis sous SQL Server, au cas où un type tombé du ciel existe sur ce SGBD.
    On ne jouit bien que de ce qu’on partage.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Perso je stockerai les minutes (voir les secondes en cas de besoin) dans un INT, la "conversion" en HH:MM:SS relevant plus de la présentation qu'autre chose.

    Après tout 15 heures, 900 minutes ou 54000 secondes, c'est la même chose. A charge au programme de restitution de faire les conversions qui vont bien pour que l'utilisateur s'y retrouve.

    Tatayo.

  3. #3
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Ok. Merci, c'est que je vais faire du coup
    En tout cas, c'est ballo cette histoire de 24 heures... Le type "Timespan" de .NET est mieux foutu !
    On ne jouit bien que de ce qu’on partage.

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    En effet, le type TIME n'a pas vocation de stocker des durées, mais des heures.

    La sémantique n'est pas la même, mais surtout la manipulation :

    On peut diviser (par exemple des taches) par 12 heures, mais on ne peut pas diviser par midi...

    Cela nous mène au type à utiliser. tout dépend des manipulations que vous allez effectuer ensuite. Si justement vous compter effectuer des divisions, vous aurez aussi des problèmes d'arrondi avec les INT si vous ne prenez pas garde à transtyper en décimal lors de vos calculs. Dans ce cas, un type décimal serait certainement plus approprié. Ses performances ne sont pas si déplorables que ça. Pensez à indiquer une précision (et éventuellement une échelle), la plus petite répondant à votre besoin.

    Si vous comptez faire essentiellement des sommes, alors le type INT comme l'a indiqué tatayo est bon aussi.


    je veux pas entendre parler de FLOAT qui fait des erreurs d'arrondi
    Attention, on peut avoir des erreurs d'arrondi au même titre avec un décimal. Là encore tout dépend des calculs que vous allez effectuer.

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 153
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    J'ai besoin de faire des soustractions : lors de la création d'un planning, je dois décompter les heures planifiées des heures contractuelles afin de ne pas planifier trop d'heures pour un employé. Donc pour 35 heures, avec une granularité de 30 minutes, je me retrouve avec 70 soustractions successives au moment de la création du planning.
    On ne jouit bien que de ce qu’on partage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [2012] Nombre d'heures entre 2 datetime heures de bureau
    Par Babyneedle dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/03/2013, 10h24
  2. Nombre d'heures pleines entre 2 datetime
    Par Grosse_Mite dans le forum Powerbuilder
    Réponses: 1
    Dernier message: 22/10/2008, 17h16
  3. Comptabiliser le nombre d'heures connecté à Internet
    Par faten7 dans le forum C++Builder
    Réponses: 3
    Dernier message: 09/04/2006, 22h41
  4. Convertir un nombre d'heure format HH:MM
    Par jerome_sinclair dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/11/2005, 21h51
  5. Stocker un nombre réel
    Par julson dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/04/2004, 08h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo