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

MS SQL Server Discussion :

Transformer un datetime en hh:mm:ss de plus de 24h


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2011
    Messages : 15
    Par défaut Transformer un datetime en hh:mm:ss de plus de 24h
    Bonjour,

    Afin d'obtenir une durée de fontionnement d'un équipement, j'effectue la différence entre 2 champs de type datetime.
    J'obtiens donc une valeur datetime (aaaa/mm/jj hh:mm:ss) (ex : 1900/01/05 12:00:00)
    J'aimerais transformer ce résultat en format horaire (hhh:mm:ss) (ex : 132:00:00).

    J'ai beau rechercher avec les CAST, CONVERT et DATEPART, je n'arrive pas à obtenir ce que je veux.

    Quelqu'un sait-il comment faire ?

    D'avance merci,

    Axvier

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Bonjour,

    La différence entre 2 dates n'est pas une date mais une durée. La fonction Datediff retourne un entier correspondant au datepart fourni en premier paramètre.

    A priori vous souhaitez avoir une durée en secondes. Il vous faudra convertir cela lors de l'affichage pour avoir une durée au format souhaité.

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Debut et Fin étant des datetime :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 
    	DATEDIFF(second, Periode.Debut, Periode.Fin) as DureeSecondes, 
    	DATEDIFF(second, Periode.Debut, Periode.Fin) / 3600 as Heures,
    	(DATEDIFF(second, Periode.Debut, Periode.Fin) % 3600) / 60 as Minutes,
    	DATEDIFF(second, Periode.Debut, Periode.Fin) % 60 as Secondes
    FROM Periode
    donne la durée de la période en secondes et 3 colonnes qui décomposent cette durée en heures, minutes, secondes. Je vous laisse le soin de formater et concaténer pour avoir le résultat sous la forme que vous voulez.

    remarques :
    - la division d'un entier donne un entier (la partie entière de la division)
    - % donne le reste de la division

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 683
    Par défaut
    Et une fonction utilisateur pour formater un nombre de secondes en chaine h:mm:ss

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    CREATE FUNCTION DureeSecondesVersHHMMSS
    (
    	@pDureeSecondes int
    )
    RETURNS varchar(10)
    AS
    BEGIN
    	DECLARE @sDureeChaine varchar(10) ;
    	DECLARE @nHeures int ;
    	DECLARE @nMinutes int ;
    	DECLARE @nSecondes int ;
     
    	SET @nHeures = @pDureeSecondes / 3600 ;
    	SET @nMinutes = (@pDureeSecondes % 3600) / 60 ;
    	SET @nSecondes = @pDureeSecondes % 60 ;
     
    	SET @sDureeChaine = CONCAT(@nHeures, ':', RIGHT(CONCAT('0', @nMinutes), 2), ':', RIGHT(CONCAT('0', @nSecondes), 2)) ;
     
    	RETURN @sDureeChaine
    END
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
    	DATEDIFF(ss, Periode.Debut, Periode.Fin) as DureeSecondes, 
    	dbo.DureeSecondesVersHHMMSS(DATEDIFF(ss, Periode.Debut, Periode.Fin)) as DureeFormatee
    FROM Periode

Discussions similaires

  1. [DATA] Transformer un format datetime
    Par laeticiagooding dans le forum SAS Base
    Réponses: 3
    Dernier message: 18/02/2014, 23h01
  2. Transformation de format Datetime
    Par lounou dans le forum Langage
    Réponses: 4
    Dernier message: 11/06/2012, 08h54
  3. Transformer une date caractère en datetime SAS
    Par statasma dans le forum SAS Base
    Réponses: 5
    Dernier message: 01/12/2011, 16h18
  4. Transformer un TIMESTAMP en DATETIME
    Par Krycek dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/10/2009, 15h43
  5. Transformation datetime pour requete sql
    Par olibara dans le forum C#
    Réponses: 6
    Dernier message: 24/08/2008, 11h21

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