我正在寻找与PHP相同的str_replace的MySQL。我想将一个单词的所有实例替换为另一个单词,我想运行一个查询,将所有“苹果”替换为“橙子”。
之所以:
UPDATE fruits SET name ='oranges'WHERE name ='apples';
对我的情况不起作用,因为我常常在表格行中有多个单词,用逗号分隔,如:“苹果,梨,菠萝”。在这种情况下,我只想用橙子,梨和菠萝代替苹果,以保持机智。
有没有办法做到这一点?
答案 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')