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 :

Convertir un entier en caractère avec des 0 devant


Sujet :

Développement SQL Server

  1. #1
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut Convertir un entier en caractère avec des 0 devant


    J'ai besoin de convertir un champ type int en type char dans une de mes requêtes. J'utilise donc la fonction convert. Le soucis c'est que le tri ensuite ne se fait pas correctement : 1, 10, 100, 101...
    J'aimerai donc lors de l'appelle de convert ajouter automatiquement des 0 à gauche pour que le tri se fasse correctement.

    Existe-t-il une fonction toute faite que je n'aurai pas trouvé dans l'aide ou une astuce ? Ou bien faut-il faire une fonction à la main ?

    Merci !

  2. #2
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    146
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    l'opérateur de concaténtation est le '+'

  3. #3
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    quel est le rapport avec ma question ?

    Comme je n'ai rien trouvé de tout fait j'ai fais la fonction moi même, s'il y a plus simple, merci de me le dire

    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
    CREATE  Function F_zerogauche (@ENTREE int, @LONGUEUR int)
    returns varchar(50)
    as
    begin
      declare @i int
      declare @NOMBRE varchar(50)
      declare @TAILLE int
     
      set @NOMBRE = convert(varchar(50),@ENTREE)
      set @TAILLE = len(@NOMBRE)
      set @LONGUEUR = @LONGUEUR - @TAILLE
      set @i = 0
     
      while @i < @LONGUEUR
      begin
        set @NOMBRE = '0'+@NOMBRE
        set @i = @i + 1
      end
     
      return ltrim(rtrim(@NOMBRE))
     
    end

  4. #4
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Autre possibilité

    '0000'+cast(mon_champs as char)

    en ensuite tu le decoupe a la bonne taille (en partant de la droite !), pour cela utilise len et substring

  5. #5
    Membre chevronné Avatar de Oluha
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 183
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 183
    Points : 1 967
    Points
    1 967
    Par défaut
    ok mais dans ce cas, ca ne fonctionne pas sur une longueur variable ? (sauf si j'ai pas compris).
    Là j'aurais au plus 4 zéros devant non ?

  6. #6
    Membre actif
    Avatar de Eric.H
    Homme Profil pro
    Inscrit en
    Décembre 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 220
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par Oluha
    ok mais dans ce cas, ca ne fonctionne pas sur une longueur variable ? (sauf si j'ai pas compris).
    Là j'aurais au plus 4 zéros devant non ?
    Ben si tu decoupe la chaine généré


    Par exemple pour decoupé sur 6 caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 
    '0000'+cast(numero_commande as char)
    ,
    len ('0000'+cast(numero_commande as char))
    ,
    substring('0000'+cast(numero_commande as char),
    	  len('0000'+cast(numero_commande as char)-5),
    	  6
              )
    FROM COM_PROD
    par contre faire une fonction serait plus propre....

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 74
    Points : 84
    Points
    84
    Par défaut
    Hello
    il y a une fonction toute faite pour celà : REPLICATE

    par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    RIGHT(REPLICATE('0',5) + CAST(@MyNum as varchar(5)), 5)
    te fera une chaine toujours de 5 caractères avec autant de 0 que nécessaire devant ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ex
    RIGHT(REPLICATE('0',5) + CAST(101 as varchar(5)), 5)
    00101
     
    RIGHT(REPLICATE('0',5) + CAST(25 as varchar(5)), 5)
    00025
    etc..

    have fun.

  8. #8
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    En SQL vous pouvez simplement utiliser :
    SI
    Code_Article = 34
    et que nous voulons 00034 (un résultat sur 5 caractères)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT     RIGHT('0000' + CONVERT(varchar, Code_Article), 4) AS Code
    FROM         TPRODUIT

  9. #9
    Invité
    Invité(e)
    Par défaut
    Merci de ta participation. J'espère cependant que le problème a été réglé en 10 ans !
    Es-tu vraiment l'architecte d'une base de données ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Sur DB2 : right(repeat('0', 5)||trim(cast(champs as varchar(5))), 5)

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Beaucoup plus simple :
    FORMAT(macolonne, '0000000000000000')

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT FORMAT(object_id, '0000000000000000')AS oid_OOO, *
    FROM   sys.objects
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  12. #12
    Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Mince ça a du m'échapper dans ton livre

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 577
    Points
    52 577
    Billets dans le blog
    5
    Par défaut
    Je l'ai mis, mais pas documentée car cela aurait nécessité au moins dix pages de plus !!!!!
    https://sqlbackupandftp.com/blog/wp-...Formatting.pdf

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Chaine de caractères avec des espaces
    Par totoff80 dans le forum Débuter
    Réponses: 18
    Dernier message: 12/04/2008, 16h12
  2. Réponses: 1
    Dernier message: 10/01/2008, 10h10
  3. Réponses: 4
    Dernier message: 26/11/2007, 12h25
  4. Convertir un entier en caractère
    Par b_steph_2 dans le forum C++
    Réponses: 1
    Dernier message: 01/12/2005, 11h21
  5. Réponses: 2
    Dernier message: 06/12/2002, 07h50

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