2010-10-15 13 views
34

Hier ist eine Beispieltabelle:str_replace in SQL UPDATE?

name  | picture 

John S. | http://servera.host.com/johns.png 
Linda B. | http://servera.host.com/lindab.png 
... 

der dort mehrere hundert Datensätze sind Lassen Sie sagen.

Sagen wir auch, wir haben Server von "Servera" nach "Serverb" verschoben.

Wäre es möglich, in diese Tabelle mit eine Abfrage zu gehen, um den Inhalt in der Spalte "Bild" für jeden Datensatz umzubenennen, um den korrekten Servernamen zu lesen?

+3

Ja, auf fast jeder Datenbank-Engine wäre es möglich, dies mit einer einzigen UPDATE-Abfrage zu tun . Da Sie jedoch kein bestimmtes Produkt angeben, erhalten Sie wahrscheinlich nur Antworten auf das Lieblingsprodukt eines anderen. Lassen Sie uns wissen, was Sie verwenden und jemand wird mit der Syntax für dieses Produkt antworten. –

+0

Oh, das stimmt - danke, Larry. Ich habe vergessen zu erwähnen, dass ich auf MySQL –

+0

entwickle Dies ist eher ein architektonischer Knackpunkt als die Beantwortung Ihrer Frage direkt, aber ich würde vorschlagen, nicht den FQDN der URL in Ihrer Datenbank zu speichern. Behalte das als Konstante in deinem Anwendungscode, und wenn du dann einen Link zu deinem Bild ziehst, wird src die Datei PIC_HOST_DOMAIN_NAME. '/ Johns.png' kombinieren. Dies macht es viel einfacher, Ihre Bilder zu verschieben und ein CDN als CNAME vor Ihren Bildern zu verwenden. –

Antwort

81

T-SQL:

update TBL 
    set picture = Replace(picture, 'servera', 'serverb') 
where picture like '%servera%' 

Oracle:

update TBL 
    set picture = replace(picture, 'servera', 'serverb') 
where picture like '%servera%' 

MySQL:

update TBL 
    set picture = REPLACE(picture, 'servera', 'serverb') 
where picture like '%servera%' 
+0

Es ist schön, einfache mächtige Funktionen zu finden :) Danke für das MySQL-Beispiel. +1 – Ben

14
UPDATE users 
SET picture = REPLACE(picture, 'http://servera.host.com/', 'http://serverb.host.com/') 
WHERE picture LIKE 'http://servera.host.com/%'; 

ich darunter bin mehr der Saite, weil ich darum kümmern würde ein Bild mit dem Namen "awesomeserverasomething.jpg" reparieren. Ich könnte auch darüber nachdenken, eine base_url-Tabelle zu haben und nur Bilddateinamen in Benutzern zu speichern, aber das ist nicht die Frage, die Sie gestellt haben ;-)