UPDATE [table_name] SET [field_name] = REPLACE ( [field_name], "foo", "bar");
Meetai.com
6
Je pense qu'il est plus rapide de ne pas l'utiliser WHERE instr(field, 'foo') > 0;(donc il ne ferait pas 2 recherches) ... Ai-je tort?
inemanja
2
@treddell, aucune position ne commence à 1 dans les chaînes SQL.
Alexis Wilke
2
@inemanja, @Air sans la WHEREclause vous faites un UPDATEsur toutes les lignes ...
Alexis Wilke
7
Comme Pring, si vous voulez laisser un commentaire comme ça, vous voudrez peut-être expliquer pourquoi. Était-ce une erreur dans le conseil d'origine ou une erreur de votre part? Et vous savez qu'avant d'apporter des modifications radicales à une base de données, vous êtes censé la sauvegarder en premier?
pdwalker
86
UPDATE table_name
SET field = replace(field,'string-to-find','string-that-will-replace-it');
Fonctionne pour moi car j'ai besoin d'ajouter une autre clause où. UPDATE table_name SET field = REPLACE (field, 'foo', 'bar') WHERE field LIKE '% foo%' AND otherfield = 'foo22'
Travaille pour moi. Cela dépend de la façon dont vous interprétez la question. Si vous devez modifier les entrées de la base de données, utilisez update. Sinon, cette solution est bien meilleure car elle peut être utilisée sans mettre à jour les champs.
Gruber
0
J'ai utilisé la ligne de commande ci-dessus comme suit: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); le but était de remplacer And par et ("A" devrait être en minuscule). Le problème est qu'il ne peut pas trouver le «et» dans la base de données, mais si j'utilise comme «% et%», il peut le trouver avec de nombreux autres ands qui font partie d'un mot ou même ceux qui sont déjà en minuscules.
[field_name]
, "foo", "bar");WHERE instr(field, 'foo') > 0;
(donc il ne ferait pas 2 recherches) ... Ai-je tort?WHERE
clause vous faites unUPDATE
sur toutes les lignes ...la source
Comme par exemple, si je veux remplacer toutes les occurrences de John par Mark que j'utiliserai ci-dessous,
la source
Et si vous souhaitez rechercher et remplacer en fonction de la valeur d'un autre champ, vous pouvez faire un CONCAT:
Juste pour avoir celui-ci ici afin que les autres le trouvent immédiatement.
la source
D'après mon expérience, la méthode la plus rapide est
Le
INSTR()
chemin est le deuxième plus rapide et l'omission de laWHERE
clause est la plus lente, même si la colonne n'est pas indexée.la source
La fonction Remplacer la chaîne le fera.
la source
update
. Sinon, cette solution est bien meilleure car elle peut être utilisée sans mettre à jour les champs.J'ai utilisé la ligne de commande ci-dessus comme suit: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); le but était de remplacer And par et ("A" devrait être en minuscule). Le problème est qu'il ne peut pas trouver le «et» dans la base de données, mais si j'utilise comme «% et%», il peut le trouver avec de nombreux autres ands qui font partie d'un mot ou même ceux qui sont déjà en minuscules.
la source