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 :

Conversion d'un entier sous format HHMM


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Points : 81
    Points
    81
    Par défaut Conversion d'un entier sous format HHMM
    Bonjour,

    J'ai une fonction SQL Server 2005 qui prend en entrée un integer ( en minutes MM ) et qui doit me retourner un entier de la forme HHMM (Heure Minutes).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    ALTER FUNCTION [dbo].[Function4] 
    	(
    @param integer
     
    	)
    RETURNS integer  As 
    	BEGIN
    		return  (convert(varchar(2),@param / 60) +convert(varchar(2), @param % 60)	)
     
    	END
    Cette fonction marche bien, cependant, pour le cas où j'ai par exemple 03h 05 minutes, au lieu de me retourner 0503 , elle me retourne 53 !!!!

    comment forcer le nombre de minutes sur 2 caractères et celui d'heures sur 2 aussi ?

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    -1- Votre fonction retourne un entier , donc vous n'aurez jamais votre résultat de la forme 0XXX.
    -2- Vous ne traitez pas dan votre fonction le cas où vos heures / minutes < 10 donc d'une longueur de 2.
    Votre résultat ne pourra jamais être de la forme 0X0X.

    J'ai modifié votre fonction en conséquence :
    (Cependant la fonction est imparfaite. Elle ne traite pas le cas où votre nombre d'heure sera > 24)

    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
     
    CREATE FUNCTION [dbo].[Function_test] 
    (
     @param INT
    )
    RETURNS CHAR(4)  
    AS 
    BEGIN
     RETURN (CASE LEN(@param / 60)
                   WHEN 1 THEN '0' + CAST(@param / 60 AS CHAR(1))
    	  ELSE CAST(@param / 60 AS CHAR(2))
    	END
    	+
    	CASE LEN(@param % 60)
    	 WHEN 1 THEN '0' + CAST(@param % 60 AS CHAR(1))
    	 ELSE CAST(@param % 60 AS CHAR(2))
    	END
                )
    END
    ++

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    296
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 296
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonjour,

    -1- Votre fonction retourne un entier , donc vous n'aurez jamais votre résultat de la forme 0XXX.
    -2- Vous ne traitez pas dan votre fonction le cas où vos heures / minutes < 10 donc d'une longueur de 2.
    Votre résultat ne pourra jamais être de la forme 0X0X.

    J'ai modifié votre fonction en conséquence :
    (Cependant la fonction est imparfaite. Elle ne traite pas le cas où votre nombre d'heure sera > 24)

    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
     
    CREATE FUNCTION [dbo].[Function_test] 
    (
     @param INT
    )
    RETURNS CHAR(4)  
    AS 
    BEGIN
     RETURN (CASE LEN(@param / 60)
                   WHEN 1 THEN '0' + CAST(@param / 60 AS CHAR(1))
    	  ELSE CAST(@param / 60 AS CHAR(2))
    	END
    	+
    	CASE LEN(@param % 60)
    	 WHEN 1 THEN '0' + CAST(@param % 60 AS CHAR(1))
    	 ELSE CAST(@param % 60 AS CHAR(2))
    	END
                )
    END
    ++

    Merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/02/2015, 10h05
  2. Réponses: 3
    Dernier message: 01/03/2008, 19h41
  3. conversion d'un entier en ASCII
    Par bischof dans le forum Langage
    Réponses: 6
    Dernier message: 08/07/2005, 13h18
  4. [Dates] Calendrier sous format 20000101
    Par nunor dans le forum Langage
    Réponses: 9
    Dernier message: 10/11/2004, 00h03
  5. Réponses: 3
    Dernier message: 20/09/2004, 09h00

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