Utilisation de Replace dans SQL

13

J'ai une table et j'ai besoin de mettre à jour certains noms mais je me demandais

requêtes suivantes:

Les deux feront-ils de même?

Requête1

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

Requête2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Scorpion99
la source

Réponses:

11

Non, ce n'est pas pareil.

La première requête recherche une chaîne dans la chaîne entière (voir replace () " Remplace toutes les occurrences d'une valeur de chaîne spécifiée par une autre valeur de chaîne. "), La seconde recherche la chaîne exacte.

Si vous avez des enregistrements comme JeffJoe, la première requête donnera JoeJoe, la deuxième requête donnera JeffJoe(sans aucune modification).

irimias
la source
25

Non, ils ne feront pas la même chose.

  1. La quantité d'effort requise par le moteur SQL est complètement différente. Dans la première requête, le moteur doit parcourir chaque ligne et effectuer une opération de remplacement de chaîne dans la colonne Nom. Dans la deuxième requête, il recherche dans la table où le nom est "Jeff" et met simplement à jour la colonne Nom pour être Joe.

  2. Le remplacement de chaîne est un caractère générique. Ainsi, dans la première requête, le nom "Jeffrey" deviendrait "Joerey".

Jonathan Fite
la source
3
Le point 2 semble le plus important. S'il ne fait pas la bonne chose, les performances sont sans importance.
Martin Smith
Vous avez probablement raison, mais nous ne savons pas réellement quel est l'objectif commercial de la mise à jour. J'aurais dû inverser l'ordre de l'analyse, mais je pense que mentionner les deux défauts était la bonne chose à faire. Une pensée qui me vient à l'esprit est que l'OP l'a simplifié pour nous, mais a omis des détails, tels que "Nom" contient en fait le nom complet plutôt que juste le prénom.
Jonathan Fite