在 SQL 中使用替换

Sco*_*n99 13 sql-server

我有一张桌子,我需要更新一些名字,但我想知道

以下查询:

两者都会这样做吗?

查询1

Update mytable
Set Name = Replace(Name,'Jeff','Joe')
Run Code Online (Sandbox Code Playgroud)

查询2

Update mytable
Set Name = 'Joe'
where Name = 'Jeff'
Run Code Online (Sandbox Code Playgroud)

Jon*_*ite 26

不,他们不会做同样的事情。

  1. SQL 引擎所需的工作量完全不同。在第一个查询中,引擎必须遍历每一行并对 Name 列执行字符串替换操作。在第二个查询中,它正在搜索名称为“Jeff”的表,并将 Name 列更新为 Joe。

  2. 字符串替换是通配符。因此,在第一个查询中,名称“Jeffrey”将变为“Joerey”。

  • 第2点似乎更重要。如果它没有做正确的事情,性能就无关紧要。 (3认同)

iri*_*ias 11

不,这不一样。

第一个查询在整个字符串中查找字符串(请参阅replace()用另一个字符串值替换所有出现的指定字符串值。 ”),第二个查询查找确切的字符串。

如果您有类似JeffJoe的记录,第一个查询将给出JoeJoe,第二个查询将给出JeffJoe(不作任何修改)。