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'

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).


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".


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.