Requête SQL pour modifier une partie d'une valeur d'un champ - SQL/NoSQL - Programmation
Marsh Posté le 29-03-2007 à 17:15:13
Code :
|
é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
Marsh Posté le 29-03-2007 à 17:18:33
|| substr(chemin,20,length(chemin)), c'est pour garder et concaténer ce qui suit http://MonSite/Rep1/, c'est bien ça?
Marsh Posté le 29-03-2007 à 17:22:37
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é.
Marsh Posté le 29-03-2007 à 17:48:10
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
Marsh Posté le 29-03-2007 à 17:49:39
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
Marsh Posté le 29-03-2007 à 17:50:40
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
Marsh Posté le 29-03-2007 à 19:14:29
mais puisque je te dis qu'il existe aussi sous mysql, mais sous un autre nom
Marsh Posté le 30-03-2007 à 11:23:59
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...
Marsh Posté le 30-03-2007 à 13:23:26
http://dev.mysql.com/doc/refman/4. [...] tions.html ( fonction replace)
la semaine prochaine, tutorial sur la recherche dans la doc mysql
Marsh Posté le 30-03-2007 à 13:54:22
lol, en plus c'est bien sous le nom standard
genre au caractère prêt, la requête que j'avais écrit dès le départ marche bel et bien sous MySQL
rufo, t'as droit à un seau d'eau gravier
Marsh Posté le 30-03-2007 à 14:04:41
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 :
|
Marsh Posté le 30-03-2007 à 14:07:02
évidement que ça marche
(et comme je disais, le WHERE est inutile à moins que ton champ chemin soit indexé)
Marsh Posté le 30-03-2007 à 14:10:52
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!"
Marsh Posté le 30-04-2008 à 09:58:57
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
Marsh Posté le 30-04-2008 à 10:39:53
hardos1986 a écrit : allez hop deterage du topic |
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=""
Marsh Posté le 09-08-2013 à 21:28:51
ça fonctionne très bien
Code :
|
Marsh Posté le 29-03-2007 à 17:10:27
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