UPDATE SET REPLACE () ifadesi neden satırlarla eşleşir, ancak hiçbirini değiştirmez ve uyarı vermez?


9

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 WHEREfı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' )

Yanıtlar:


12

REPLACEjoker karakterlerle bu şekilde oynamaz. Sanırım demek istedin:

UPDATE [table] 
  SET [column] = REPLACE([column],'TLD.com','TLD.org')
  WHERE [column] LIKE '%TLD.com%';

Yan tümceniz yok WHERE, bu nedenle 618 satırı güncellemeye çalıştı , ancak %TLD.com%bu sütunda herhangi bir örnek bulamadı . Hangi satırların etkilenmesi gerektiğini görmek için SELECTbunun yerine bir satır çalıştırın :

SELECT [column], REPLACE([column], 'TLD.com', 'TLD.org') AS new_value
  FROM [table]
  WHERE [column] LIKE '%TLD.com%';

0

İlk olarak, bir selectsorgu kullanarak kontrol etmeliyiz :

SELECT * FROM colleges
WHERE course_name LIKE '%&amp%'

Sonra, güncellemeliyiz:

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')
WHERE id = 1

Sonuçlar: Cloud &amp Enterprise ComputingCloud & Enterprise Computing

Son olarak, herkese başvurmalıyız:

UPDATE colleges
SET course_name = REPLACE(course_name, '&amp', '&')

Sonuçlar: Corporate &amp Insolvency LawCorporate & Insolvency Law

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.