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

Requêtes MySQL Discussion :

Modifier un caractère dans une chaine en fonction de sa position


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut Modifier un caractère dans une chaine en fonction de sa position
    Bonjour !

    Je pense que le titre est assez explicite : je souhaite dans un update modifier un seul caractère d'une chaine de caractère en fonction de sa position, et non en fonction du caractère en lui-même. J'ai essayé ceci (et quelques autres trucs bien entendu, mais rien de concluant) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE topic SET event = REPLACE(event, SUBSTRING(event, 2, 1), '1') WHERE idTopic=6
    Le problème c'est que mes champs sont binaires : soit '1000', soit '1010', soit '0010', soit '0000' etc.
    Par conséquent, si je veux passer le 2e caractère de ma chaîne ( '1000' ) à 1, avec ma requête j'obtiens : '1111'.
    Le 2e caractère étant 0, la fonction replace remplace tous les 0 par 1. ( C'est logique )

    Je suis assez bloquée...

    Est-ce que ça vous semble possible?
    Est-ce que vous avez des idées?

    Merci à vous !

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Citation Envoyé par Marie Br Voir le message
    Le problème c'est que mes champs sont binaires : soit '1000', soit '1010', soit '0010', soit '0000' etc.
    Quel est le type de la colonne event ?

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Bonjour, et merci pour votre réponse. Le champ event est de type texte comme le laissait penser les quotes.
    Par contre, tu me fais penser à quelque chose !! Je pense que je vais tout simplement passer le champ en type int et je ne n'aurais plus qu'à faire +10 ou -10 pour changer le caractère numéro 2. Je pense que ce sera la solution la plus simple à mettre en place !

    Par contre si quelqu'un trouve une solution pour faire la modif, je suis tout de même intéressée par celle-ci. Pour le plaisir d'apprendre.

    Merci !

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Le problème de le passer en numérique pour y stocker 0101, c'est que le premier zéro non significatif va être perdu...

    Le mieux, vu que cela semble être un masque de bit, est de le stocker effectivement au format numérique, mais après conversion en base 10.

    Votre opération deviendrait simple en utilisant les opérateurs bit à bit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UPDATE topic SET event = event | 4
    Vous pouvez utiliser CONV pour changer de base.

    Par exemple, en gardant votre colonne au format string, vous pouvez faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UPDATE topic
        SET event = CONV(CONV(event, 2, 10) | 4, 10, 2)
    Mais un type chaine de caractère est une grosse perte ici : vous utiliser un octet pour stocker un bit...

  5. #5
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 24
    Points
    24
    Par défaut
    Ah je suis bête, j'avais effectivement oublié que les premiers 0 seraient perdus... Je testerai ta solution dès que j'aurais 2 min, merci pour ton aide en tout cas

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/01/2013, 21h52
  2. [VS.net] Vérifier le présence d'un caractère dans une chaine
    Par arnolem dans le forum Windows Forms
    Réponses: 15
    Dernier message: 10/09/2005, 16h19
  3. Recuper un caractère dans une chaine. (novice)
    Par Thierry8 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/08/2005, 10h07
  4. Réponses: 8
    Dernier message: 08/06/2004, 02h29

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