Bir alanda belirli bir dize arıyorum ve yeni bir dize ile değiştirmek istiyorum. Özellikle, bir URL'ye yapılan tüm referansların başka bir URL'ye değiştirilmesini istiyorum. Bu SQL deyimini hazırladım ve mysql>
MySQL Community Server 5.1.54 kullanarak CentOS 5.5'te bir istemde çalıştırıyorum .
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
Yanıt:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Neden hiçbir değişiklik yapılmadığını nasıl izleyebilirim?
DÜZENLEME 1:
Aaron Bertrand sayesinde, REPLACE()
joker karakterlerle başa çıkamayacağını keşfettim ve onu tamamen yanlış kullanıyordum (düşün: eksik WHERE
fıkra). İşte benim reform ifadem:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
Ben eski, tanıdık almak:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
Neyi yanlış yapabilirdim?
DÜZENLEME 2:
Sana neyi yanlış yaptığımı anlatacağım !! Varsayımları sorgulamıyordum. Benim varsayım ben değiştirdiğim dize tüm küçük harf oldu. WHERE yan tümcesi, görünen her şeyi döndürüyorduLIKE %companydomain.com%
. Buna CompanyDomain.com, CoMpAnYdOmAiN.com vb. Gibi tüm büyük harf kullanım permütasyonları dahildir.
Bunu REPLACE()
daha sonra companydomain.com'u daha sonra companydomain.org ile değiştirecek bir şekilde aradı.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Tabii ki kayıtlarım iade ediliyordu, ama hiçbir şey değiştirilmiyordu. Büyük / küçük REPLACE()
harfleri hesaba katmak için değiştiğimde , tüm kayıtlar güncellendi ve her şeyin yolunda olduğu anlaşılıyor. REPLACE()
Benim senaryom için doğru sözdizimi böylece oldu:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )