Korzystanie z zamiany w SQL

13

Mam tabelę i muszę zaktualizować niektóre nazwiska, ale zastanawiałem się nad tym

następujące zapytania:

Czy oboje zrobią to samo?

Zapytanie 1

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

Zapytanie 2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Scorpion99
źródło

Odpowiedzi:

11

Nie, to nie to samo.

Pierwsze zapytanie szuka ciągu w całym ciągu (patrz replace ()Zamienia wszystkie wystąpienia określonej wartości ciągu na inną wartość. ”), Drugie szuka dokładnego ciągu.

Jeśli masz rekordy takie jak JeffJoe, pierwsze zapytanie da JoeJoe, drugie zapytanie da JeffJoe(bez żadnych modyfikacji).

irimias
źródło
25

Nie, nie zrobią tego samego.

  1. Wysiłek wymagany przez silnik SQL jest zupełnie inny. W pierwszym zapytaniu silnik musi przejść przez każdy wiersz i wykonać operację zamiany łańcucha w kolumnie Nazwa. W drugim zapytaniu przeszukuje tabelę, w której nazywa się „Jeff”, i po prostu aktualizuje kolumnę Nazwa na Joe.

  2. Zastępowanie ciągów jest znakiem wieloznacznym. W pierwszym zapytaniu nazwa „Jeffrey” zmieni się na „Joerey”.

Jonathan Fite
źródło
3
Punkt 2 wydaje się ważniejszy. Jeśli to nie pomoże, wydajność nie ma znaczenia.
Martin Smith
Prawdopodobnie masz rację, ale tak naprawdę nie wiemy, jaki powinien być cel biznesowy aktualizacji. Powinienem był odwrócić kolejność analizy, ale myślę, że wspomnianie obu wad było słuszne. Jedną z myśli, które przychodzą mi na myśl, jest to, że OP uprościł nam to, ale pominęliśmy szczegóły, tak że „Nazwa” faktycznie zawiera pełne imię, a nie tylko imię.
Jonathan Fite