簡體   English   中英

如何用另一個數據庫替換一個特定值的所有實例?

[英]How to replace all instances of a particular value in a mysql database with another?

我正在尋找與str_replace對於PHP等效的MySQL。 我想將一個單詞的所有實例替換為另一個,我想運行一個查詢,將所有“蘋果”替換為“橙色”。

之所以:

UPDATE水果SET name ='oranges'WHERE name ='apples';

不適用於我的情況,是因為我經常在表格行中用逗號分隔多個單詞,例如:“蘋果,梨,菠蘿”。 在這種情況下,我希望只用橘子代替蘋果,再將梨和菠蘿代替,以保持原樣。

有什么辦法嗎?

不可靠。 REPLACE() ,但是只有在您決定將菠蘿添加到菜單中時,該功能才起作用。

唯一可靠的解決方案是將數據庫設置為First Normal Form ,然后使用UPDATE

正如Ignacio指出的那樣,您存在數據庫設計問題。 該列應該成為一個單獨的表,每行僅包含一條信息,而不是在單個列中包含單獨的信息。 例如,如果“ fruits”字段位於名為“ hats”的表中,則將有一個“ hats”表,其列為“ hat_id”, 但沒有關於水果的信息 ,第二列為“ hat_fruits”,其列為兩列,“ hat_id”和“ fruit_name”。 在您的示例中,給定的帽子在“ hat_fruits”中具有三行,每個水果一行。

一旦實現了此設計(如果您可以控制數據庫設計),則可以返回原來使用的簡單UPDATE命令。 此外,您將能夠按水果類型建立索引,更輕松地搜索,使用更少的磁盤空間,驗證水果名稱,並且對適合數據庫的水果數量沒有任何限制

就是說,如果您絕對無法修復數據庫結構,則可以嘗試如下操作:

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

這種怪獸首先將Fru​​its字段轉換為以逗號開頭和結尾,然后刪除逗號之前的所有空格。 這應該為您提供一個字符串,其中的水果名稱明確地由逗號分隔。 最后,它用,oranges替換了,apples(注意分隔符)。

當然,在那之后,您應該刪除開頭和結尾的逗號,並在逗號之后放回空格(留給讀者練習)。

更新 :好的,我忍不住要查找它:

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

請注意,這未經測試,而且我也不是MySQL專家-我不知道MySQL是否存在函數嵌套問題或類似問題。

PS:不要告訴任何人我是向您展示此內容的人!

我認為您想使用REPLACE()

替換(str,from_str,to_str)

返回字符串str,其中所有出現的字符串from_str都替換為字符串to_str。 搜索from_str時,REPLACE()執行區分大小寫的匹配。

對於“水果”表中的所有行,下面將在“名稱”列中將所有出現的“蘋果”替換為“橙色”。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM