1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut Calculer une somme de plusieurs parties du même champ

    Bonjour, j'ai un petit problème j'ai un champ Time sur ma BDD , en utilisant ce champ je dois calculer une somme du genre (Heure+(Minute/60)+(seconde/3600)) mais je ne sais vraiment pas comment prendre chaque élément de ce champ c'est à dire les heures puis les minutes puis les secondes Nom : solution.PNG
Affichages : 82
Taille : 6,7 Ko


    Merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 714
    Points : 5 995
    Points
    5 995
    Billets dans le blog
    1

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    ya pas de réponse la discussion n'a pas était résolu , en plus le problème que j'ai moi c'est que le champ il est de type Varchar et non pas DateTime ou Time

  4. #4
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 714
    Points : 5 995
    Points
    5 995
    Billets dans le blog
    1

    Par défaut

    Ce n'est pas par ce que le sujet n'est pas marqué résolu, que la réponse n'y est pas

    Si vous avez la possibilité de faire corriger cette hérésie de modélisation, commencez par là : un colonne sensée contenir une heure, doit être de type datetime

    Dans le cas contraire, toutes mes condoléances, car vous n'avez aucune garantie que le contenu soit bel et bien une heure, il faut donc gérer tous les cas, ce qui vous conduira à une requête de toutes façon très compliquée, difficile à maintenir, et dont les performances seront pitoyables.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    je ne peux changer la type de ma colonne car les données je les importe d'un fichier excel et quand je met la colonne en type time j'ai un bug au niveau de l'application lors de la conversion ce qui fait j'ai trouvé que le type Varchar me va bien

  6. #6
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 714
    Points : 5 995
    Points
    5 995
    Billets dans le blog
    1

    Par défaut

    Ce bug dans excel est très probablement du au fait que justement, toutes les lignes ne respectent pas un contenu de type heure, et là... c'est le drame car vous avez à tester :
    - les contenus non numériques
    - les cadrages hasardeux (absence des secondes ou des heures, ou encore absence des zéros non significatifs)
    - les plages horaires invalides (28h72 par exemple)
    - des séparateurs fonction de l'humeur du temps (08:40:05 ou 08h40m05s)
    etc...

    Voyez si l'application qui produit ce fichier excel ne peut pas faire en sorte que ces heures en soient vraiment !

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    Bonjour, désolé pour le retard mais je te rejoint dans ton idée je pense aussi que le problème vient de l'application qui génère le fichier excel , et le problème c'est que l'entreprise travaille avec il y'a des années ,du coup je ne pourrai pas demander a ce qu'ils changent quelque chose dedans pour que ca soit compatible avec la mienne , donc je ne sais vraiment ps quoi faire là !

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    alors pas d'autres solutions ?

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 4 413
    Points : 8 931
    Points
    8 931

    Par défaut

    D'autres solutions propres et performantes non, mais vous pouvez faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH TMP AS (
    	SELECT RIGHT('0' + LaColonne, 9) C
    	FROM LaTable
    )
    SELECT		CAST(LEFT(C, 2) AS DECIMAL(10,8)) 
    			+ CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60
    			+ CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600
    FROM TMP

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    le " With " viens après quoi dans le code ? je ne l'ai jamais utilisé

  11. #11
    Expert confirmé

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 714
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 714
    Points : 5 995
    Points
    5 995
    Billets dans le blog
    1

    Par défaut

    Après rien, il vous permet de créer une CTE (Common Table Expression), ce qui simplifie l'écriture des requêtes en évitant d'imbriquer les requêtes en cascade

    Dans l'exemple donné, la CTE est nommée TMP est elle est ensuite utilisée dans la requête, d'où le "FROM TMP"

    Vous devriez aller visiter la FAQ SQL, vous y trouverez toutes ces explications, et bien d'autres
    https://www.developpez.net/forums/d6...q-langage-sql/

  12. #12
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    d'accord merci , je vais voir ca lundi car je développe sur mon pc au bureau

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    ta requête marche , ca me donne le resultat que je voulais , maintenant comment selectionner d'autres colonnes en même temps que cette requête? est-ce que je peux l'appler dans le même Select ou bien faut-il un select en dehors du With ?

  14. #14
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    Citation Envoyé par aieeeuuuuu Voir le message
    D'autres solutions propres et performantes non, mais vous pouvez faire comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    WITH TMP AS (
    	SELECT RIGHT('0' + LaColonne, 9) C
    	FROM LaTable
    )
    SELECT		CAST(LEFT(C, 2) AS DECIMAL(10,8)) 
    			+ CAST(SUBSTRING(C, 4, 2) AS DECIMAL(10,8)) / 60
    			+ CAST(SUBSTRING(C, 7, 2) AS DECIMAL(10,8)) / 3600
    FROM TMP
    comment je peux faire pour afficher plus de colonnes dans cette requête ? je peux l'intégrer dans une Select ou quoi ?

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : janvier 2010
    Messages : 4 413
    Points : 8 931
    Points
    8 931

    Par défaut

    il suffit d'ajouter les colonnes en question dns la CTE (TMP dans l'exemple) ainsi que dans la requête principale.

  16. #16
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    mai 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : mai 2013
    Messages : 141
    Points : 56
    Points
    56

    Par défaut

    oui oui j'ai réussi a le faire Merci beaucoup a vous tous

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

Discussions similaires

  1. Calculer une somme
    Par sleen dans le forum Excel
    Réponses: 10
    Dernier message: 17/04/2008, 17h43
  2. calculer une somme géométrique
    Par sisqo77 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 31/07/2007, 05h48
  3. Decoupé une fenêtre en plusieurs parties
    Par Premium dans le forum AWT/SWING
    Réponses: 4
    Dernier message: 12/12/2006, 13h34
  4. [VB.NET]Calculer une somme dans un DataGridView
    Par pat59 dans le forum Windows Forms
    Réponses: 17
    Dernier message: 09/11/2006, 14h36
  5. Réponses: 7
    Dernier message: 15/02/2005, 13h55

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