Використання Замінити в SQL


13

У мене є таблиця, і мені потрібно оновити деякі імена, але мені було цікаво

наступні запити:

Чи будуть обидва робити те саме?

Запит1

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

Запит2

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

Відповіді:


11

Ні, це не те саме.

Перший запит шукає рядок у всій рядку (див. Заміна () " Замінює всі входження вказаного значення рядка іншим значенням рядка. "), Другий шукає точний рядок.

Якщо у вас є записи типу JeffJoe, перший запит дасть JoeJoe, другий запит дасть JeffJoe(без будь-яких змін).


25

Ні, вони не зроблять те саме.

  1. Кількість зусиль, необхідних для двигуна SQL, зовсім інша. У першому запиті двигун повинен пройти кожен рядок і виконати операцію заміни рядка в стовпці Ім'я. У другому запиті він проводить пошук через таблицю, де ім'я "Jeff", і просто оновлення стовпця Name на Joe.

  2. Заміна рядків - це підстановка. Тож у першому запиті ім'я "Джефрі" перетворилося б на "Джорі".


3
Точка 2 видається більш важливою. Якщо це не робиться правильно, продуктивність не має значення.
Мартін Сміт

Ви, мабуть, правильні, але ми фактично не знаємо, якою має бути ділова мета оновлення. Я мав би змінити порядок аналізу, але я думаю, що згадування обох недоліків було правильним. Однією з думок, яка спадає на думку, є те, що ОП спростила його для нас, але залишила деталі, так що "Ім'я" насправді містить повне ім'я, а не просто ім'я.
Джонатан Фійт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.