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

Développement SQL Server Discussion :

Calculer une somme de plusieurs parties du même champ


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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 Pièce jointe 284953


    Merci d'avance

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9

  3. #3
    Membre du Club
    Homme Profil pro
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    alors pas d'autres solutions ?

  9. #9
    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
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    Par défaut
    le " With " viens après quoi dans le code ? je ne l'ai jamais utilisé

  11. #11
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    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 : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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
    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
    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
    ertertaertar
    Inscrit en
    Mai 2013
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : ertertaertar

    Informations forums :
    Inscription : Mai 2013
    Messages : 314
    Points : 55
    Points
    55
    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