Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1502 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête SQL pour modifier une partie d'une valeur d'un champ

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête SQL pour modifier une partie d'une valeur d'un champ

n°1535973
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2007 à 17:10:27  profilanswer
 

Dans une BD Mysql 3.23.58, j'ai une table où je dois remplacer pour un certain type d'enregsitrements, une partie d'une valeur d'un champ.

ex :  
Ma table "Fichiers"
ID : entier, clé primaire
Chemin : Chaîne
 
Voici qq enregsitrements
1 | http://MonSite/Rep1/AutreRep/Fichier1.doc
2 | http://MonSite/Rep1/Fichier2.txt
3 | http://AutreSite/Fichier3.pdf
4 | http://MonSite/Rep1/Rep2/Rep3/Fichier4.xls


 
Je voudrais remplacer, grâce à une requête SQL, la portion de chaîne "http://MonSite/Rep1/" par "http://NouveauSite/RepToto/RepTiti/" dans tous les enregistrements concernés (ceux qui ont dans leur champ "Chemin" la chaîne "http://MonSite/Rep1/" ). C'est possible? Merci :)


Message édité par rufo le 29-03-2007 à 17:10:43
mood
Publicité
Posté le 29-03-2007 à 17:10:27  profilanswer
 

n°1535976
casimimir
Posté le 29-03-2007 à 17:15:13  profilanswer
 

Code :
  1. update Fichiers
  2. set chemin = 'http://NouveauSite/RepToto/RepTiti/' || substr(chemin,20,length(chemin))
  3. where chemin like 'http://MonSite/Rep1/%'


 
écrit pour oracle donc la syntaxe est peut-etre un peu différente, a checker aussi si le substr 20 length(chemin) couvre bien la bonen portion

n°1535979
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2007 à 17:18:33  profilanswer
 

|| substr(chemin,20,length(chemin)), c'est pour garder et concaténer ce qui suit http://MonSite/Rep1/, c'est bien ça?

n°1535984
MagicBuzz
Posté le 29-03-2007 à 17:22:37  profilanswer
 

pkoi pas utiliser la fonction replace plutôt ?
 
update Fichiersset chemin = replace(chemin, 'http://MonSite/Rep1/', 'http://NouveauSite/RepToto/RepTiti/')
where chemin like 'http://MonSite/Rep1/%'
 
=> le "where" est inutile si le champ "chemin" n'est pas indexé.

n°1536011
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2007 à 17:48:10  profilanswer
 

j'ai lu la doc sur replace, ça va pas le faire : http://dev.mysql.com/doc/refman/5.0/fr/replace.html
 
Au mieux, ça va me virer les anciens enregistrements et m'insérer les nouveaux et dans ce cas, j'aurais plus les mêmes ID (ce qui ne me va pas du tout), au pire, ça va me laisser les anciens et m'ajouter à la fin de ma BD les nouveaux, ce qui ne me va pas non plu...
 
Cet article confirme ec que je disais : http://developpeur.journaldunet.co [...] lace.shtml


Message édité par rufo le 29-03-2007 à 17:48:44
n°1536013
MagicBuzz
Posté le 29-03-2007 à 17:49:39  profilanswer
 

en mysql ça doit être str_replace ou une connerie du genre.
 
puis qu'évidement, pour faire comme d'hab, ils ont inventé l'instruction proprio "replace", qui fait que le nom était déjà pris pour l'implémentation de la fonction standard "replace"...
 
m'enfin bon, après c'est mysql, faut pas chercher plus loin


Message édité par MagicBuzz le 29-03-2007 à 17:49:49
n°1536015
MagicBuzz
Posté le 29-03-2007 à 17:50:40  profilanswer
 

moi je parle de ce replace là :
http://msdn2.microsoft.com/fr-fr/library/ms186862.aspx
 
après, faut trouver sous quel nom bâtard ils ont collé ça sous mysql ;)

n°1536018
rufo
Pas me confondre avec Lycos!
Posté le 29-03-2007 à 17:54:20  profilanswer
 

a bah oui mais c'est du mssql :/ Ca m'arrange pas trop...

n°1536047
MagicBuzz
Posté le 29-03-2007 à 19:14:29  profilanswer
 

mais puisque je te dis qu'il existe aussi sous mysql, mais sous un autre nom :o

n°1536318
rufo
Pas me confondre avec Lycos!
Posté le 30-03-2007 à 11:23:59  profilanswer
 

j'ai pas réussi à trouver :( Je me suis paluché la table d'index des fonctions de mysql et j'ai rien trouvé. J'ai finalement fait un petit script php qui met à jour chaque enregistrement un à un...


Message édité par rufo le 30-03-2007 à 11:24:39
mood
Publicité
Posté le 30-03-2007 à 11:23:59  profilanswer
 

n°1536371
anapajari
s/travail/glanding on hfr/gs;
Posté le 30-03-2007 à 13:23:26  profilanswer
 

http://dev.mysql.com/doc/refman/4. [...] tions.html ( fonction replace)
la semaine prochaine, tutorial sur la recherche dans la doc mysql

n°1536388
MagicBuzz
Posté le 30-03-2007 à 13:54:22  profilanswer
 

lol, en plus c'est bien sous le nom standard :o
 
genre au caractère prêt, la requête que j'avais écrit dès le départ marche bel et bien sous MySQL :o
 
rufo, t'as droit à un seau d'eau gravier :o

n°1536397
rufo
Pas me confondre avec Lycos!
Posté le 30-03-2007 à 14:04:41  profilanswer
 

J'ai bien vu cette fonction mais je ne vois pas en quoi ça me sert à updater en 1 requête tous les enregistrements impactés.
Replace() s'utilise dans une requête de type SELECT...
A mois que ce genre de requête fonctionne :  

Code :
  1. UPDATE MaTable SET MonChamp = REPLACE(MonChamp, 'http://MonSite/Rep1/', 'http://NouveauSite/RepToto/RepTiti/') WHERE MonChamp LIKE 'http://MonSite/Rep1/%'

n°1536400
MagicBuzz
Posté le 30-03-2007 à 14:07:02  profilanswer
 

évidement que ça marche :o
 
 
(et comme je disais, le WHERE est inutile à moins que ton champ chemin soit indexé)


Message édité par MagicBuzz le 30-03-2007 à 14:07:34
n°1536404
rufo
Pas me confondre avec Lycos!
Posté le 30-03-2007 à 14:10:52  profilanswer
 

bon ben je me coucherai moins bête ce soir car "une journée où on n'apprend rien est une journée de perdue!" :D

n°1726733
hardos1986
Posté le 30-04-2008 à 09:58:57  profilanswer
 

allez hop deterage du topic
 
je voudrais faire la meme chose mais à la place de la chaine 'http://NouveauSite/RepToto/RepTiti/'
 
je voudrais mettre un champ de la table.
 
Voila requete que je tente de faire :
 
UPDATE jos_content SET title = title+" (nok)" WHERE introtext=""
 
La requete fonctionne mais aucun enregistrement n'est affecté, auriez-vous une idée d'ou ca peut venir car lorsque je fais cette requete par exemple
 
UPDATE jos_content SET title_alias = title WHERE introtext=""
 
ca modifie mes 3000 enregistrements
 
merci

Message cité 1 fois
Message édité par hardos1986 le 30-04-2008 à 09:59:21
n°1726751
Paulp
~, sweet ~
Posté le 30-04-2008 à 10:39:53  profilanswer
 

hardos1986 a écrit :

allez hop deterage du topic
 
je voudrais faire la meme chose mais à la place de la chaine 'http://NouveauSite/RepToto/RepTiti/'
 
je voudrais mettre un champ de la table.
 
Voila requete que je tente de faire :
 
UPDATE jos_content SET title = title+" (nok)" WHERE introtext=""
 
La requete fonctionne mais aucun enregistrement n'est affecté, auriez-vous une idée d'ou ca peut venir car lorsque je fais cette requete par exemple
 
UPDATE jos_content SET title_alias = title WHERE introtext=""
 
ca modifie mes 3000 enregistrements
 
merci


 
Je crois pas que l'operateur + marche sur les chaînes de caractère.
Essaye  
UPDATE jos_content SET title = CONCAT(title," (nok)" ) WHERE introtext=""
 

n°2199847
yajuve
Posté le 09-08-2013 à 21:28:51  profilanswer
 

ça fonctionne très bien    

Code :
  1. UPDATE MaTable SET MonChamp = REPLACE(MonChamp, 'http://MonSite/Rep1/', 'http://NouveauSite/RepToto/RepTiti/') WHERE MonChamp LIKE 'http://MonSite/Rep1/%'


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête SQL pour modifier une partie d'une valeur d'un champ

 

Sujets relatifs
Passage d'une requête en paramètre[PHP] Votre avis sur ma requete
ACCESS : Problème pour importer champ date[PHP] Requete et SQL
Multi Requete Ajax[C#] Dataset et champ date MySQL
Cherche Script php associé à une requete cronChamp Newsletter sur ma page d'accueil???
requete sql et variable 
Plus de sujets relatifs à : Requête SQL pour modifier une partie d'une valeur d'un champ


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR