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

Langage SQL Discussion :

[Oracle 9i] Update d'une partie d'un champ


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut [Oracle 9i] Update d'une partie d'un champ
    Bonjour je souhaiterais "updater" un champ d'une table mais seulement une partie d'une chaine de caractere.

    c'est a dire que je possede un champ avec une chaine de caractere genre 'abcd'
    et je souhaiterais changer seulement les carateres 'bc' par 'xz' par exemple pour avoir au final 'axzd' et cela pour plusieurs lignes.

    Est ce possible car je ne trouve pas d'info sur le changement de seulement une partie d'un champ.

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    Pour modifier une partie d'une chaîne, tu peux utiliser la fonction INSERT.

    INSERT(str,pos,len,newstr)
    Retourne une chaîne de caractères str, après avoir remplacé la portion de chaîne commençant à la position pos et de longueur len caractères, par la chaîne newstr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
            -> 'QuWhattic'

  3. #3
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Il ne faut pas specifier la table en particulier ?
    Car je suis en train de faire un script pour mettre a jour toutes mes lignes d'une tables ou une partie de la chaine de caractere a changer

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    @tchoukapi
    Vous n'avez pas respecté les règles du forum en indiquant votre SGBD, donc j'ai effectué ce jeu d'essais sous Oracle 10gR1 :
    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
    10g SOC5> CREATE TABLE DVP (LC_CHAINE VARCHAR2(25));
     
    Table créée.
     
    10g SOC5> INSERT INTO DVP VALUES ('ABCD');
     
    1 ligne créée.
     
    10g SOC5> 
    10g SOC5> UPDATE DVP
      2  SET LC_CHAINE = TRANSLATE(LC_CHAINE, 'AC', 'XY');
     
    1 ligne mise à jour.
     
    10g SOC5> 
    10g SOC5> SELECT *
      2  FROM DVP;
     
    LC_CHAINE
    -------------------------
    XBYD
     
    1 ligne sélectionnée.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Points : 562
    Points
    562
    Par défaut
    En fait, je t'ais seulement indiquer un exemple d'utilisation de la fonction INSERT (provenant de la documentation MySQL).

    Il faut ensuite créer une requête UPDATE utilisant cette fonction.

    Voici un exemple plus concret :
    Soit une table nom_table avec les champs id et champ1.
    champ1 contient une chîne de caractère de la forme 'abcd' (4 caractères).
    Pour modifier les 2 caractères du milieu ('bc') par 'xy' pour l'enregistrement dont l'id est 2, tu peux exécuter la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE nom_table
    SET champ1=INSERT(champ1,3,4,'xy')
    WHERE WHERE id=2
    A toi ensuite d'adapter cette requête pour quelle corresponde à tes besoins.

  6. #6
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Erf excusez moi ui je suis sous oracle9 et merci pour les infos suppplementaires je test de suite ...

    Hum en fait la chaine de caractere a modifier est 'ER' que je veux transformer en 'RG' et ca me donne avec le translate : 'GG' sur les lignes qui sont deja avec la chaine 'RG'

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Je comprends.
    En fait, il faut savoir que la fonction TRANSLATE fait correspondre chaque caractère de son 2ème à chaque caractère de son 3ème argument.

    Pour en revenir à votre, contexte, est-ce que la chaîne que vous recherchez 'ER' se trouve toujours à la même position ; par exemple à partir du 15ème caractère ?

    Donnez-nous un jeu d'essai minimal reflétant ce que vous souhaitez faire.

  8. #8
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    UI en effet la chaine de caractere se trouve toujours au meme emplacement (meme nombre de caractere avant)

  9. #9
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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
    10g SOC5> SELECT *
      2  FROM   DVP;
     
    LC_CHAINE
    -------------------------
    ABEF****EKRJFHEJRFH
    ABEF****ABEF
    ABCD****ABEF
     
    3 ligne(s) sélectionnée(s).
     
    10g SOC5> 
    10g SOC5> UPDATE DVP
      2  SET    LC_CHAINE = SUBSTR(LC_CHAINE, 1, 2) || 'DF' || SUBSTR(LC_CHAINE, 5)
      3  WHERE  SUBSTR(LC_CHAINE, 3, 2) = 'EF';
     
    2 ligne(s) mise(s) à jour.
     
    10g SOC5> 
    10g SOC5> 
    10g SOC5> SELECT *
      2  FROM   DVP;
     
    LC_CHAINE
    -------------------------
    ABDF****EKRJFHEJRFH
    ABDF****ABEF
    ABCD****ABEF
     
    3 ligne(s) sélectionnée(s).

  10. #10
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    269
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 269
    Points : 172
    Points
    172
    Par défaut
    Impeccable !
    ca marche nickel, je vous remercie !

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

Discussions similaires

  1. Update sur une partie du contenu d'un champ
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/11/2008, 15h21
  2. Update sur une partie d une table
    Par Seth77 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 08/12/2007, 13h50
  3. Recherche d'une partie d'un champ texte
    Par Daniel MOREAU dans le forum Access
    Réponses: 2
    Dernier message: 13/01/2006, 18h04
  4. Select sur une partie d'un champs texte
    Par dl_jarod dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/11/2005, 15h25
  5. tri sur une partie d'un champ
    Par yoline dans le forum Access
    Réponses: 4
    Dernier message: 19/09/2005, 11h25

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