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

 MySQL Discussion :

Supprimer du texte d'une colonne (pas tout)


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 13
    Points
    13
    Par défaut Supprimer du texte d'une colonne (pas tout)
    Bonsoir,

    J'ai créé une colonne referencedans laquelle se trouve lesdites references et leur descriptifs -> erreur de conception je me l'accorde


    Je cherche en vain depuis quelques nuits à écrire un script permettant d'éliminer ce texte qui commence toujours par 'Le' (et dont la longueur est variable)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     UPDATE table
    SET reference = REPLACE( reference, LIKE "Le%","");
    LIKE % n'est pas compris

    Ou bien c'est moi qui n'ai pas compris ?

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par melix1 Voir le message
    Je cherche en vain depuis quelques nuits à écrire un script permettant d'éliminer ce texte qui commence toujours par 'Le' (et dont la longueur est variable)
    Si "Le" ne peut pas faire partie de ce qui précède le texte à éliminer, il faut chercher la position de "Le" et ne garder que le nombre de caractères précédant cette position.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT POSITION('Le' IN '1234Le quelque chose')
    => 5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LEFT('1234Le quelque chose', POSITION('Le' IN '1234Le quelque chose') - 1)
    => '1234'

    Adapté à ton cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LEFT(reference, POSITION('Le' IN reference) - 1)
    Cette fonction fait partie des fonctions de chaînes de caractères de MySQL.
    Bonne nuit !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Merci Phil,

    Si j'ai bien pigé, ce script selectionne la partie gauche -1 à partir de la chaine "Le"

    Ca marche au poil !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT LEFT(`reference`, POSITION('Le' IN reference) - 1)
    FROM matable
    Puis-je integrer cette commande SELECT avec INSERT INTO (genre comme ca )?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ALTER TABLE matable
    	ADD aleax_reference VARCHAR (40);
     
    INSERT INTO matable (aleax_reference)
    SELECT LEFT(`reference`, POSITION('Le' IN reference) - 1)
    FROM matable;
    ou alors il y a plus simple ?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    INSERT ajoute des lignes à la table !
    Ce que tu veux, je crois que c'est plutôt alimenter ta nouvelle colonne avec la chaîne calculée ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ta_table
    SET aleax_reference = LEFT('reference', POSITION('Le' IN 'reference') - 1)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Oui,
    j'ai testé INSERT et je retrouve les resultats dont les yeux ne sont pas en face des trous

    j'étais en train de batailler avec des jointures quand je t'ai enfin lu !

    Faudra que je te paye une mousse quand je serai de passage à toulouse

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par melix1 Voir le message
    Faudra que je te paye une mousse quand je serai de passage à toulouse
    Volontiers !

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Tout est bien rangé dans l'étable MYSQL
    J'ai quand même du aller chercher quelques moutons : Merci Phil pour le chemin !

    La colonne est sensée : soit etre vide, soit contenir une reference

    SELECT ne me retrouve plus rien !!!
    J'ai bien gratté et je me retrouve avec un (espace) et un (return) en fin de chaine...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE ma_table
    SET aleax_reference = REPLACE(REPLACE(aleax_reference,"\n",""),"\r","") ;
    Et la, les champs supposés vides (pas null) n'ont plus de (return) mais toujours un (espace) que je n'arrive pas à eradiquer ni à identifier !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE ma_table
    SET aleax_reference= REPLACE( aleax_reference," ","");
     
    L,R,TRIM pas efficace non plus
    Rien n'y fait !

    Par ailleurs, les champs contenant les references n'ont pas cet espace inconnu!!
    D'ou l'impossibilité de virer le dernier caractere...

    Alors voici le début de la solution :

    Est ce que un champ NULL vide contient un caractère invisible et imposé par le programme ?
    Si oui, quel est il ???

    Sinon, comment savoir quel est ce caractère invisible (qui n'est pas 'espace') ???

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Les valeurs textuelles s'écrivent entre apostrophes, pas entre guillemets.

    J'ai bien gratté et je me retrouve avec un (espace) et un (return) en fin de chaine...
    Ma requête de mise à jour n'était pas sensée ajouter \n\r ! C'est donc qu'ils figuraient déjà dans la colonne, avant 'Le'.

    Et la, les champs supposés vides (pas null) n'ont plus de (return) mais toujours un (espace) que je n'arrive pas à eradiquer ni à identifier !
    Sauf qu'avec ta première requête, tu n'as pas supprimé d'espace !
    Avec la deuxième, en principe oui.

    Est ce que un champ NULL vide contient un caractère invisible et imposé par le programme ?
    NULL est un marqueur d'absence de valeur. Il ne peut être testé que par IS NULL ou IS NOT NULL parce que NULL n'est égal à rien, pas même à NULL.
    Donc une colonne (et pas champ !) NULL et une colonne vide sont deux choses différentes : vide = une chaîne vide ''.

    Si ta référence est purement numérique, essaie cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT aleax_reference -- + les colonnes te permettant de retrouver la ligne
    FROM ta_table
    WHERE aleax_reference < 1
    Tu devrais avoir toutes les références "vides".
    Ensuite, s'il n'y a pas de lignes résultat qui ne doivent être vides, tu devrais pouvoir faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE ta_table
    SET aleax_reference = NULL
    WHERE aleax_reference < 1

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    BOUDI !!!
    References pas entièrement numerique : FJ0523 , PQ6539, F1230 ,

    Analysons la situation :

    Toutes les references contiennent plus d'un caractere.

    Je cherche à effacer les lignes de celles qui n'en contiennent qu'un ( l'inconnu ) ou pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM ma_table 
    WHERE CHAR_LENGTH(aleax_reference) < 2


    Alors LENGTH , CHAR, et CHAR_LENGTH ne me donnent pas les memes resultats ???


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM ma_table
    WHERE aleax_reference = CHAR_LENGTH(aleax_reference) < 2
    m'efface toute les données de la colonne, meme >2 ????
    NO COmpRenDo NaDa...

    Plus je veux faire simple, plus c'est compliqué !

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par melix1 Voir le message
    References pas entièrement numerique : FJ0523 , PQ6539, F1230 ,
    Donc variabilité de la forme des références :
    - 1 lettre + 4 chiffres ;
    - 2 lettres + 4 chiffres ;
    - autres ?

    Toutes les references contiennent plus d'un caractere.

    Je cherche à effacer les lignes de celles qui n'en contiennent qu'un ( l'inconnu ) ou pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM ma_table 
    WHERE CHAR_LENGTH(aleax_reference) < 2
    Alors LENGTH , CHAR, et CHAR_LENGTH ne me donnent pas les memes resultats ???
    Extrait de la doc MySQL, qu'il est bon de consulter avant de poser les questions !
    CHAR(N,...) La fonction CHAR() interprète les arguments comme des entiers et retourne une chaîne de caractères, constituée des caractères, identifiés par leur code ASCII. Les valeurs NULL sont ignorées :
    mysql> SELECT CHAR(77,121,83,81,'76');
    -> 'MySQL'
    mysql> SELECT CHAR(77,77.3,'77.3');
    -> 'MMM'

    CHAR_LENGTH(str) Retourne le nombre de caractères de la chaîne str: Un caractère multi-octets compte comme un seul caractère. Cela signifie que pour une chaîne contenant 5 caractères de 2 octets, LENGTH() retournera 10, alors que CHAR_LENGTH() retournera 5.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM ma_table
    WHERE aleax_reference = CHAR_LENGTH(aleax_reference) < 2
    m'efface toute les données de la colonne, meme >2 ????
    NO COmpRenDo NaDa...
    Lis ta requête :
    Supprimer de la table "ma_table"
    les lignes où la colonne aleax_reference est égale au résultat logique de (nombre de caractères de aleax_reference inférieur à 2).
    Le résultat logique est un booléen qui vaudra 0 ou 1.

    La bonne requête serait plutôt celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM ma_table
    WHERE CHAR_LENGTH(aleax_reference) < 2
    Ton SELECT était bon et tu n'avais plus qu'à le transformer en DELETE.
    Ceci dit, DELETE supprime des lignes, pas le contenu d'une colonne ! Est-ce vraiment ce que tu veux faire ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 18
    Points : 13
    Points
    13
    Par défaut
    Donc variabilité de la forme des références :
    - 1 lettre + 4 chiffres ;
    - 2 lettres + 4 chiffres ;
    - autres ?
    Heu oui, beaucoup d'autres aussi

    Extrait de la doc MySQL, qu'il est bon de consulter avant de poser les questions !
    Voila !!! J'aurais du commencer par la ! parce que mon bouquin de chevet sur le sujet est assez peu fourni !!!

    Ceci dit, DELETE supprime des lignes, pas le contenu d'une colonne ! Est-ce vraiment ce que tu veux faire ?
    Exactement, absolument j'avais essayé plusieurs formules qui tournaient autour du pot dont je ne fournirait pas d'exemples par respect de bienseance

    Phil, je te promet que je reviendrai bientot t'embeter avec de nouvelles questions sur les trigger dont je n'ai absolument pas abordé le sujet


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

Discussions similaires

  1. [DisplayTag] Comment changer la couleur du texte d'une colonne
    Par azur_34 dans le forum Taglibs
    Réponses: 8
    Dernier message: 06/08/2007, 17h39
  2. Aligner le contenu texte d'une colonne de Jtable
    Par grabriel dans le forum Composants
    Réponses: 2
    Dernier message: 26/12/2006, 09h56
  3. Réponses: 3
    Dernier message: 22/10/2006, 23h15
  4. supprimer les doublons . . . . d'une colonne donnée !
    Par pekka77 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/10/2006, 17h38
  5. Réponses: 3
    Dernier message: 16/06/2006, 11h53

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