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 :

[Fonction SQL Server] Convertir des secondes en heure


Sujet :

MS SQL Server

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut [Fonction SQL Server] Convertir des secondes en heure
    Bonjour,

    J'ai un petit problème. Dans une application qui ne peut rechercher les données qu'à l'aide de requêtes, procédures ou fonctions (business object pour ne pas le citer), je dois transformer un champs heure de type entier qui représente une heure en secondes, dans sa représentation normale "hh:mm:ss".
    Ex: 1800 = "00:30:00"

    Quelqu'un peut-il me dire si c'est réalisable avec une fonction personnalisée qui prendrait le nom du champs en paramètre et renverrait la chaîne voulue? (je ne souhaite pas utiliser de fonctions spécifiques à un sgbd...). Merci!

    Ex de requête "select mafonction(monchamp) from matable"
    renvoie les heures au format "hh:mm:ss".

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    Quelque chose du genre ?

    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
    21
    22
    23
    24
    create function fnc_sec(@i int) 
    returns datetime
    as
    BEGIN
    declare  @h int, @m int, @s int
     
    if @i > 86400
       BEGIN
       PRINT "Warning : nbre d'heures dépassant 24 ! "
       PRINT "Gestion du format JJ/MM/AA non implémenté "
       END
     
    -- Extraction des heures
    set @h=@i/(3600)
    set @i=@i-(@h*3600)
     
    -- Extraction des minutes
    set @m=@i/(60)
     
    -- Extraction des secondes
    set @s=@i-(@m*60)
     
    return (convert(varchar(2),@h)+':'+ convert(varchar(2), @m) +':'+ convert(varchar(2), @s))
    END
    ... à édulcorer selon vos besoins
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut
    merci fadace ;-) je viens juste de me souvenir que j'avais posté une question sur ce forum! je vais essayer...

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    Citation Envoyé par falcon
    je viens juste de me souvenir que j'avais posté une question sur ce forum!
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut
    bon ca marche sauf que le "print" avec la chaine il aime pas donc j'ai du l'enlever ensuite si je veux que ce soit un varchar qui soit retourné et non un datetime, il me renvoie que le premier caractère de la chaîne

  6. #6
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    ... parce qu'il faut spécifier la taille du varchar. Par défaut, c'est 1 !

    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut
    oui c'était ca ;-) jm'y connais pas encore trop lol
    bon j'ai modifié ta fonction en ca :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    CREATE function fnc_sec(@i int) 
    returns varchar(8) 
    as 
    BEGIN 
    declare  @h int, @m int, @s int , @v varchar(8)
     
     
    -- Extraction des heures 
    set @h=@i/(3600) 
    set @i=@i-(@h*3600) 
     
    -- Extraction des minutes 
    set @m=@i/(60) 
     
    if @h < 10
    set @v= '0' 
    end
     
    set @v=@v + convert(varchar(2),@h) + ':'
     
    if @m < 10
    set @v= @v +  '0' 
    end
     
    set @v=@v + convert(varchar(2),@m)
     
    return @v
    END
    et l'a il me dit que le mot set n'est pas bien utilisé et qu'il ya une syntaxe incorrecte près du end. Question subsidiaire: pour utiliser la fonction je suis obligé de l'appeler par nomowner.nomfonction, on peut pas l'appeler directement la fonction?

  8. #8
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 227
    Billets dans le blog
    25
    Par défaut
    Vous avez 2 END de trop

    La syntaxe SQL de if est soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if <condition>
       <un ordre sql>
    soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if <condition>
       BEGIN
       <plusieurs ordres sql>
       END
    On ne fait pas du VB, ici

    Soit en résultat:

    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
    21
    22
    23
    24
    25
    26
    27
    CREATE function fnc_sec(@i int) 
    returns varchar(8) 
    as 
    BEGIN 
    declare  @h int, @m int, @s int , @v varchar(8) 
     
     
    -- Extraction des heures 
    set @h=@i/(3600) 
    set @i=@i-(@h*3600) 
     
    -- Extraction des minutes 
    set @m=@i/(60) 
     
    if @h < 10 
    	set @v= '0' 
     
    set @v = @v + convert(varchar(2),@h) + ':' 
     
    if @m < 10 
    	set @v= @v +  '0' 
     
     
    set @v=@v + convert(varchar(2),@m) 
     
    return @v 
    END
    Pour ne pas avoir besoin de spécifie le owner, il suffit juste de compiler cette fonction en tant que owner (ou son alias) de la base
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 109
    Par défaut
    merci fadace pour toutes ces précisions

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

Discussions similaires

  1. convertir des secondes en heures
    Par arnaudperfect dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/05/2012, 12h29
  2. Fonction personnalisé pour convertir des secondes en Minutes:Secondes
    Par kurul1 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/01/2011, 23h26
  3. Convertir des secondes en heure/min/sec
    Par DelphLaga dans le forum Langage
    Réponses: 8
    Dernier message: 26/02/2009, 20h29
  4. convertir des secondes en heure
    Par basket10 dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 15/06/2007, 14h38
  5. [Fonction Oracle] Convertir des secondes en heure
    Par falcon dans le forum Oracle
    Réponses: 12
    Dernier message: 18/11/2004, 12h56

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