Использование Replace в SQL

13

У меня есть таблица, и мне нужно обновить некоторые имена, но мне было интересно о

следующие запросы:

Будут ли оба делать то же самое?

Query1

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

Query2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Scorpion99
источник

Ответы:

11

Нет, это не то же самое.

Первый запрос ищет строку во всей строке (см. Replace () « Заменяет все вхождения указанного строкового значения другим строковым значением. »), Второй ищет точную строку.

Если у вас есть записи типа JeffJoe, первый запрос даст JoeJoe, второй запрос даст JeffJoe(без каких-либо изменений).

irimias
источник
25

Нет, они не будут делать то же самое.

  1. Количество усилий, требуемых движком SQL, совершенно иное. В первом запросе движок должен пройти через каждую строку и выполнить операцию замены строки в столбце Имя. Во втором запросе выполняется поиск в таблице, где имя «Джефф», и просто обновление столбца «Имя» на «Джо».

  2. Замена строки является подстановочным знаком. Таким образом, в первом запросе имя «Джеффри» станет «Джорей».

Джонатан Файт
источник
3
Пункт 2 кажется более важным. Если это не делает правильно, производительность не имеет значения.
Мартин Смит
Вы, вероятно, правы, но мы на самом деле не знаем, какой должна быть бизнес-цель обновления. Я должен был изменить порядок анализа, но я думаю, что упоминание обоих недостатков было правильным решением. Одна мысль, которая приходит на ум, состоит в том, что OP упростил это для нас, но не учел детали, так что «Имя» фактически содержит полное имя, а не только имя.
Джонатан