如何用另一个替换mysql数据库中特定值的所有实例?

时间:2010-03-21 01:07:41

标签: php mysql

我正在寻找与PHP相同的str_replace的MySQL。我想将一个单词的所有实例替换为另一个单词,我想运行一个查询,将所有“苹果”替换为“橙子”。

之所以:

UPDATE fruits SET name ='oranges'WHERE name ='apples';

对我的情况不起作用,因为我常常在表格行中有多个单词,用逗号分隔,如:“苹果,梨,菠萝”。在这种情况下,我只想用橙子,梨和菠萝代替苹果,以保持机智。

有没有办法做到这一点?

4 个答案:

答案 0 :(得分:3)

不可靠。有REPLACE(),但只有在您决定将菠萝添加到菜单中之后才会有效。

将数据库放在First Normal Form中,然后使用UPDATE是唯一可靠的解决方案。

答案 1 :(得分:3)

您遇到了数据库设计问题,正如Ignacio指出的那样。该列不应包括单个列中包含的单独信息,而应成为一个单独的表,每行包含一条信息。例如,如果“fruits”字段位于名为“hats”的表中,则您将拥有一个“hats”表,其中包含“hat_id”列,但没有关于水果的信息和第二列“ hat_fruits“有两列,”hat_id“和”fruit_name“。在您的示例中,给定的帽子在“hat_fruits”中将有三行,每个水果一行。

实现此设计后(如果您可以控制数据库设计),您可以返回使用您最初使用的简单UPDATE命令。此外,您还可以按水果类型进行索引,更轻松地搜索,使用更少的磁盘空间,验证水果名称,并且不会对适合数据库的水果数量进行任意限制

也就是说,如果您无法修复数据库结构,可以尝试这样的方法:

 REPLACE(REPLACE(CONCAT(',', fruits, ','), ', ', ','), ',apples,', ',oranges,')

这种怪物首先将水果字段转换为以逗号开头和结尾,然后删除逗号前的任何空格。这应该为您提供一个字符串,其中水果名称由逗号明确分隔。最后,它取代了苹果,(注意分隔符),橙子,。

在那之后,当然,你应该删除逗号的开头和结尾,并在逗号后面放回空格(这是留给读者的练习)。

更新:好的,我无法抗拒查找:

 REPLACE(TRIM(',' FROM REPLACE(REPLACE(CONCAT(',', fruits, ','), ', ', ','), ',apples,', ',oranges,')), ',', ' ,')

请注意,这还没有经过测试,我也不是MySQL专家 - 我不知道MySQL是否存在函数嵌套问题或类似问题。

PS:不要告诉任何人我是那个向你展示的人!

答案 2 :(得分:1)

我想你想使用REPLACE()

  

REPLACE(STR,from_str均被,to_str)

     

返回字符串str,其中所有出现的字符串from_str都替换为字符串to_str。搜索from_str时,REPLACE()执行区分大小写的匹配。

答案 3 :(得分:0)

以下内容将替换“水果”表格中所有行的“名称”列中所有出现的“苹果”和“橙子”。

UPDATE fruits SET Name=REPLACE(Name,'apples','oranges')