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 :

Existe-t-il un moyen de faire un incrément SQL sur un varchar ?


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Existe-t-il un moyen de faire un incrément SQL sur un varchar ?
    Bonjour,

    Je cherche à avoir une "fonction" qui permet de faire un incrément de 1 sur une chaine de caractères.

    J'ai trouvé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare @num varchar(13) = 'BALT247';
    declare @newNum varchar(13);
     
      set @newnum = case when PATINDEX('%[0-9]%', @num) > 0 then
          left(@num, PATINDEX('%[0-9]%', @num)-1) -- Text part
          + -- concat
          right( REPLICATE('0', LEN(@num) - PATINDEX('%[0-9]%', @num)+1) + convert( varchar, convert(int, right(@num, LEN(@num) - PATINDEX('%[0-9]%', @num)+1))+1), LEN(@num) - PATINDEX('%[0-9]%', @num)+1)
        else
           @num
        end
     
    select @num, @newnum
    Cette fonction détermine la longueur de la partie numérique, la caste, effectue l'incrément de la partie numérique et reconverti le tout de nouveau en texte.

    Donc faire l'incrémentation de ceci fonctionne: "BALT247" => "BALT248".

    Maintenant, mon souci c'est justement de faire l'incrément de ceci : "BALT999".

    Je m'attends à avoir "BALU000". la fonction me ressort "BALT000" ce qui est techniquement faux.


    Est-ce que cela serait tout simplement possible?

    Merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Récupérez le dernier code ascii de votre chaîne et incrémentez le quand votre compteur passe 1000.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 964
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Récupérez le dernier code ascii de votre chaîne et incrémentez le quand votre compteur passe 1000.
    ... et quand le dernier code ascii sera 'Z'...

Discussions similaires

  1. [WD16] Faire une requête SQL sur une table ?
    Par EriCstoFF dans le forum WinDev
    Réponses: 9
    Dernier message: 01/09/2011, 11h16
  2. Réponses: 2
    Dernier message: 06/03/2008, 15h26
  3. Réponses: 4
    Dernier message: 10/11/2006, 11h55
  4. Réponses: 23
    Dernier message: 19/09/2006, 12h33
  5. Réponses: 2
    Dernier message: 03/05/2004, 13h13

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