J'ai une colonne contenant des URL (id, URL):
http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test
J'aimerais changer le mot "mises à jour" en "nouvelles". Est-il possible de faire cela avec un script?
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'
Maintenant, les lignes qui étaient comme
http://www.example.com/articles/updates/43
sera
http://www.example.com/articles/news/43
Oui, MySQL a une fonction REPLACE ():
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_replace
Notez que c’est plus facile si vous utilisez un alias lorsque vous utilisez SELECT
SELECT REPLACE(string_column, 'search', 'replace') as url....
La fonction replace devrait fonctionner pour vous.
REPLACE(str,from_str,to_str)
Retourne la chaîne str avec toutes les occurrences de la chaîne from_str remplacée par la chaîne to_str. REPLACE()
effectue une correspondance sensible à la casse lors de la recherche de from_str.
Vous pouvez simplement utiliser la fonction replace (),
avec où clause-
update tabelName set columnName=REPLACE(columnName,'from','to') where condition;
sans où clause-
update tabelName set columnName=REPLACE(columnName,'from','to');
Remarque: La requête ci-dessus, si pour les enregistrements de mise à jour directement dans la table, si vous voulez une requête sélectionnée et que les données ne doivent pas être affectées dans la table, utilisez alors la requête suivante -
select REPLACE(columnName,'from','to') as updateRecord;
En plus de la réponse de gmaggio si vous devez dynamiquement REPLACE
et UPDATE
selon une autre colonne, vous pouvez faire par exemple:
UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0,
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field)
WHERE...
Dans mon exemple, la chaîne articles/news/
est stockée dans other_table t2
et il n'est pas nécessaire d'utiliser LIKE
dans la clause WHERE
.