在SQL中使用替换


13

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

以下查询:

两者都会一样吗?

查询1

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

查询2

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

Answers:


11

不,不一样。

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

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


25

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

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

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


3
第二点似乎更重要。如果不执行正确的操作,则性能无关紧要。
马丁·史密斯

您可能是正确的,但实际上我们不知道更新的业务目标是什么。我应该颠倒分析的顺序,但是我认为提到这两个缺陷是正确的做法。想到的一个想法是,OP为我们简化了它,但省略了细节,因此“名称”实际上包含全名,而不仅仅是名字。
乔纳森·菲特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.