Atualizar um valor da coluna, substituindo parte de uma sequência

325

Eu tenho uma tabela com as seguintes colunas em um banco de dados MySQL

[id, url]

E os URLs são como:

 http://domain1.com/images/img1.jpg

Quero atualizar todos os URLs para outro domínio

 http://domain2.com/otherfolder/img1.jpg

mantendo o nome do arquivo como está.

Qual é a consulta que devo executar?

Addev
fonte
Possível duplicado da corda MySQL substituir
Steve Chambers

Respostas:

681
UPDATE urls
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/')
Dmytro Shevchenko
fonte
162
UPDATE yourtable
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/')
WHERE url LIKE ('http://domain1.com/images/%');

documentos relevantes: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

Marc B
fonte
13
Olá, por que preciso de onde?
Guy Cohen
14
@GuyCohen Porque, caso contrário, a consulta modificará todas as linhas da tabela. A WHEREcláusula otimiza a consulta para modificar apenas as linhas com determinado URL. Logicamente, o resultado será o mesmo, mas a adição de WHEREtornará a operação mais rápida.
Dmytro Shevchenko
3
Os WHEREgarante também que você está substituindo apenas peças de cordas que começam com http://etc/etc/ou string_to_be_replaced.Por exemplo, na resposta dada, http://domain1.com/images/this/is/a/testseria afetado, mas foobar/http://domain1.com/images/não o faria.
precisa saber é o seguinte
9

Você precisa da cláusula WHERE para substituir SOMENTE os registros que atendem à condição da cláusula WHERE (em oposição a todos os registros). Você usa o sinal % para indicar uma sequência parcial: IE

LIKE ('...//domain1.com/images/%');

meios todos os registros que BEGIN com "...//domain1.com/images/"e têm nada depois (que é o %de ...)

Outro exemplo:

LIKE ('%http://domain1.com/images/%')

o que significa todos os registros que contêm "http://domain1.com/images/"

em qualquer parte da corda ...

Kenneth Daly
fonte
7

Tente isso ...

update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');
ManiMaran A
fonte
1

Primeiro, tem que verificar

SELECT * FROM universityWHERE course_name CURTIR '% & amp%'

Em seguida, tem que atualizar

UPDATE universidade SET nome_do_curso = REPLACE (nome_do_curso, '& amp', '&') WHERE id = 1

Resultados: Engenharia e Tecnologia de Amplificadores => Engenharia e Tecnologia

TechyFlick
fonte