Verwenden von Ersetzen in SQL

13

Ich habe eine Tabelle und ich muss einige Namen aktualisieren, aber ich habe mich über die gewundert

folgende Fragen:

Werden beide dasselbe tun?

Abfrage1

Update mytable
Set Name = Replace(Name,'Jeff','Joe')

Abfrage2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Scorpion99
quelle

Antworten:

11

Nein, das ist nicht dasselbe.

Die erste Abfrage sucht nach einer Zeichenfolge innerhalb der gesamten Zeichenfolge (siehe replace () " Ersetzt alle Vorkommen eines angegebenen Zeichenfolgenwerts durch einen anderen Zeichenfolgenwert. "). Die zweite Abfrage sucht nach der genauen Zeichenfolge.

Wenn Sie Datensätze wie haben JeffJoe, wird die erste Abfrage geben JoeJoe, die zweite Abfrage wird geben JeffJoe(ohne Änderung).

Irimias
quelle
25

Nein, sie werden nicht dasselbe tun.

  1. Der Aufwand für die SQL-Engine ist völlig unterschiedlich. In der ersten Abfrage muss die Engine jede Zeile durchgehen und eine Zeichenfolgenersetzungsoperation für die Spalte Name ausführen. In der zweiten Abfrage wird die Tabelle durchsucht, in der der Name "Jeff" lautet, und die Spalte "Name" wird auf "Joe" aktualisiert.

  2. Das Ersetzen von Zeichenfolgen ist ein Platzhalter. In der ersten Abfrage würde der Name "Jeffrey" zu "Joerey".

Jonathan Fite
quelle
3
Punkt 2 scheint der wichtigere zu sein. Wenn es nicht das Richtige tut, ist die Leistung irrelevant.
Martin Smith
Sie haben wahrscheinlich recht, aber wir wissen nicht, was das Geschäftsziel des Updates sein soll. Ich hätte die Reihenfolge der Analyse umkehren sollen, aber ich denke, es war richtig, beide Fehler zu erwähnen. Ein Gedanke, der in den Sinn kommt, ist, dass das OP es für uns vereinfacht, aber Details weggelassen hat, so dass "Name" tatsächlich den vollständigen Namen und nicht nur den Vornamen enthält.
Jonathan Fite