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 :

Trie ascendant d'un champ version.


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 43
    Par défaut Trie ascendant d'un champ version.
    Bonjour je souhaite faire un trie ascendant d'un champ appelé version (string de la forme XXX.XXX.XXX.XXX)
    Mes contraintes sont que ces versions contiennent des caracteres "." et qu'on doit tenir comptes de ces separateurs.

    Par exemple :
    4.1.0.0 > 4.0.0.12 > 4.0.0.2

    Je me suis creusé un peu la tête. Et m'est venu l'idée de multiplie chaque groupe de chiffre (par 10^9 pour le 1er, 10^6 pour le 2ieme, 10^3 pour le 3ieme et par 1 pour le 4ieme) et de les additionner ensemble et enfin de faire un trie.

    Cependant, je n arrive pas a extraire ces groupes de chiffre.
    Je n'ai reussi qu'a extraite le 1er avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(SUBSTRING(sVersion, 0, CharIndex('.', sVersion)) as integer)*1000000000 as value FROM Releases
    Qqn peut m'aider ?
    Merci.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 7
    Par défaut
    Bonjour,

    Pour répondre directement à ton souci, voici une solution qui met en oeuvre les fonctions utilisateur de SQL Server (valable que pour la version 2000). En effet, dans ta close SELECT, tu n'arriveras pas à faire facilement un Substring d'un substring d'un substring... cela deviendra vite illisible et inmaintenable

    Voici ma fonction Version2Integer
    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
    30
    31
    32
    33
    34
    35
     
    create function Version2Integer ( @sVer varchar(50) ) returns bigint
    as
    begin
    declare @sCurrent varchar(50), @sOctet varchar(50),
    @iVer bigint, @iIndex as int
     
    set @iVer = 0
    set @sCurrent = @sVer
     
    -- récupération du premier "octet" de la version
    set @iIndex = CharIndex('.',@sCurrent)
    set @sOctet = substring( @sCurrent, 0, @iIndex)
    set @sCurrent = substring( @sCurrent, @iIndex+1, 100)
    set @iVer = @iVer + Cast(@sOctet as bigint) * 1000000000
     
    -- récupération du deuxieme "octet" de la version
    set @iIndex = CharIndex('.',@sCurrent)
    set @sOctet = substring( @sCurrent, 0, @iIndex)
    set @sCurrent = substring( @sCurrent, @iIndex+1, 100)
    set @iVer = @iVer + Cast(@sOctet as bigint) * 1000000
     
    -- récupération du troisième "octet" de la version
    set @iIndex = CharIndex('.',@sCurrent)
    set @sOctet = substring( @sCurrent, 0, @iIndex)
    set @sCurrent = substring( @sCurrent, @iIndex+1, 100)
    set @iVer = @iVer + Cast(@sOctet as bigint) * 1000
     
    -- récupération du dernier "octet" de la version
    set @sOctet = substring( @sCurrent, 0, 100)
    set @iVer = @iVer + Cast(@sOctet as bigint) * 1
     
    return @iVer
     
    end
    Et voici un exemple d'utilisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT sVersion, dbo.Version2Integer(sVersion) as value
    FROM release
    ORDER BY dbo.Version2Integer(sVersion)
    En espérant que cela t'aura aidé.

    trotin

  3. #3
    Membre averti
    Inscrit en
    Novembre 2003
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 43
    Par défaut
    Merci bcp !! Cela marche très bien
    @+

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

Discussions similaires

  1. trie par champ contenant une date
    Par kaleo dans le forum Linux
    Réponses: 4
    Dernier message: 29/03/2010, 15h07
  2. [IP-2003] Insérer le numéro de version du formulaire dans un Champ
    Par Romeoo dans le forum InfoPath
    Réponses: 1
    Dernier message: 09/07/2009, 14h00
  3. Trie champs date
    Par poosh dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/07/2007, 14h27
  4. trie sur plusieurs champs sans sql
    Par ramseskeops dans le forum Bases de données
    Réponses: 1
    Dernier message: 07/06/2007, 20h41
  5. Réponses: 12
    Dernier message: 30/03/2006, 20h55

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