快速背景,我有一个带有名为'songs'的表的小型数据库。此表包含我在机器上播放的音乐的标题,艺术家和URL。几个单引号已从轨道标题中删除(例如,不存储为dont),我试图替换它们。我只是不能让这个查询影响任何行:
UPDATE Songs
SET Title = REPLACE (Title, 'dont', 'don\'t')
没有爱。这个语法不正确吗?它告诉我0行已更新。 如果它有帮助,我正在运行版本5.5.27。我知道那里有几百行不正确的捐赠...我要将结果转储到记事本中,然后执行查找/替换,并且只是以这种方式运行更新语句,但它有点hacky。有想法的朋友吗?
几个示例行:
"51","Dont Stay Home","311","311 Greatest Hits","Rap","E:\Music\311\311GreatestHits\dontstayhome.mp3" "229","Dont Turn Around","Ace Of Base","The Very Best Of","Dance","E:\Music\AceofBase\VeryBestOf\03-ace_of_base-dont_turn_around.mp3"
按顺序排列的字段是id,title,artist,album,genre,path
答案 0 :(得分:1)
你必须这样做
UPDATE Songs
SET Title = REPLACE(Title, 'Dont', 'Don\'t');
^ ^
原因是
<强>
REPLACE(str,from_str,to_str)
强>返回字符串str,其中出现字符串from_str 替换为字符串to_str。 REPLACE()执行区分大小写 搜索from_str时匹配。
如果您想要替换任何一种情况,您可以
UPDATE Songs
SET Title = REPLACE(REPLACE(Title, 'Dont', 'Don\'t'), 'dont', 'don\'t')
WHERE Title LIKE '%dont%' -- it makes sense to limit update to only those rows that have dont in it no matter case
这是 SQLFiddle 演示
答案 1 :(得分:0)
首先想到的可能是一些看不见的角色。以下是什么回报?
select *
from songs
where title like '%dont%';
编辑:
起初我没有注意到这一点。问题是函数名后面的空格。试试这个:
UPDATE Songs
SET Title = REPLACE(Title, 'dont', 'don\'t');
中对此进行了解释
请注意
默认情况下,函数名和之间不能有空格 跟随它的括号。这有助于MySQL解析器区分 函数调用和对发生的表或列的引用之间的关系 与函数同名。但是,功能周围的空间 允许参数。
编辑II:
我不知道整理是否有效。但您也可以尝试使用双引号作为字符串分隔符:
UPDATE Songs
SET Title = REPLACE(Title, 'dont', "don't");