SQL Server 如何替换特定列中的整个值?

ogq8wdun  于 2022-11-28  发布在  其他
关注(0)|答案(1)|浏览(172)

我试图替换一个列中的整个值(pet)。值“dog”在同一列中重复了85次。如果我想用“cat”替换它,我该怎么做,但只是在一个列中(pet)?
我试过...

SELECT pet REPLACE(pet, ‘dog’, ‘cat’)
FROM Animals

错误信息

yvfmudvl

yvfmudvl1#

SQL中的REPLACE()将替换字符串列值中特定子字符串的所有示例。但在SELECT中使用时,它只影响该查询的输出,不会更新源表。
以下应返回所有宠物,第二列中的 dogs 应为 cats

SELECT pet, REPLACE(pet, ‘dog’, ‘cat’) as newPet
FROM Animals

但是REPLACE()实际上是为替换更长字符串中的“dog”而设计的,例如将thequickbrownfoxjumpsoverthelazydog更改为thequickbrownfoxjumpsoverthelazycat
它仍然适用于您的简单场景,但它会将dogfish更改为catfish,这可能不合适。
执行条件替换的另一种方法是使用CASE

SELECT pet
     , CASE pet 
           WHEN ‘dog’ THEN ‘cat’
           ELSE pet 
       END as newPet
FROM Animals

在这些示例中,替换列显示为单独的列,只是为了与源列并排演示输出,但您可以使用列 alias 返回计算列 * 而不是 * pet

SELECT CASE pet 
           WHEN ‘dog’ THEN ‘cat’
           ELSE pet 
       END as pet
FROM Animals

如果要永久更新源表中的值,请将这两个选项之一与UPDATE语句结合使用,最简单的形式如下

UPDATE Animals SET
    pet = 'cat'
WHERE pet = 'dog'

相关问题