2010-07-08 11 views
1

J'ai une base de données MySQL InnoDB.SQL: Rechercher et remplacer avec SQL?

J'ai une colonne dans la table 'article' appelée url qui doit être mise à jour.

stockées dans article.url =

/blog/2010/article-name 
/blog/1998/the-article-name 
/blog/... 

Je dois changer /blog/-/news/. (Par exemple, maintenant article.url = '/ nouvelles/...)

Quel est le SQL nécessaire pour remplacer "/ blog /" avec "/ nouvelles /" dans la article.url colonne ?

Répondre

4
update url 
set article = replace(article, '/blog/', '/news/') 
where article like '/blog/%' 
+0

Cela peut vous causer des problèmes s'il y a un '/ blog /' au milieu d'une URL d'article. –

+0

Était simplement en ajoutant la clause 'where 'que vous avez tapé cela. – RedFilter

+0

@ar, je ne le crois pas puisque Red Filter ne met qu'un% sur le côté droit et pas sur le côté gauche aussi – Erik8

1

Si chaque URL commence par «/blog/» et vous ne voulez pas changer quoi que ce soit, sauf le préfixe, vous pouvez simplement utiliser substring() et concat() au lieu de remplacer():

update article 
set url = concat('/news/',substring(url,7)) 
where url like '/blog/%'; 
+0

Que représente le "7"? – Erik8

+0

@ Erik8: "7" est la position de départ pour la sous-chaîne: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring –

+0

Mais cela ne suppose-t-il pas que * tout * url dans ma base de données commence par "/ blog". Que se passe-t-il si j'ai dans ma base de données une URL commençant par "/ xyz /"? – Erik8

0

Je voulais récemment remplacer une chaîne dans MySQL à la volée, mais le champ pourrait contenir 2 éléments. Donc, je passai un REPLACE() dans un REPLACE(), tels que:

REPLACE(REPLACE(field_name, “what we are looking for”, “replace first instance”), 
     “something else we are looking for”, “replace second instance”) 

Ceci est la syntaxe I utilisée pour détecter une valeur booléenne:

REPLACE(REPLACE(field, 1, “Yes”), 0, “No”) 

Hope this helps!