2012-09-03 61 views
0

我有一個包含很多行(大約1,500)的表格。在city_name列中,一些單元格具有城市名稱並以(CD)結尾。我希望帶有(CD)的單元在沒有(CD)的情況下更新。這是我的表的預覽:如果單元格中存在字符串,則更新單元格內容MySQL

+---------+-----------------------+---------+ 
| city_id | city_name    | id_dept | 
+---------+-----------------------+---------+ 
|  1 | El Encanto (CD)  |  1 | 
|  2 | La Chorrera (CD)  |  1 | 
|  3 | La Pedrera (CD)  |  1 | 
|  4 | La Victoria (CD)  |  1 | 
|  5 | Leticia    |  1 | 
|  6 | Miriti Parana (CD) |  1 | 
|  7 | Puerto Alegria (CD) |  1 | 
|  8 | Puerto Arica (CD)  |  1 | 
|  9 | Puerto Nariño   |  1 | 
|  10 | Puerto Santander (CD) |  1 | 
+---------+-----------------------+---------+ 
10 rows in set (0.00 sec) 

而這正是我想有:

+---------+-----------------------+---------+ 
| city_id | city_name    | id_dept | 
+---------+-----------------------+---------+ 
|  1 | El Encanto   |  1 | 
|  2 | La Chorrera   |  1 | 
|  3 | La Pedrera   |  1 | 
|  4 | La Victoria   |  1 | 
|  5 | Leticia    |  1 | 
|  6 | Miriti Parana   |  1 | 
|  7 | Puerto Alegria  |  1 | 
|  8 | Puerto Arica   |  1 | 
|  9 | Puerto Nariño   |  1 | 
|  10 | Puerto Santander  |  1 | 
+---------+-----------------------+---------+ 
10 rows in set (0.00 sec) 

嗯,我明白我可以使用選擇所有(CD)的行:

SELECT * FROM city WHERE city_name LIKE ("%(CD)%") 

但我怎麼刪除(CD):

UPDATE city SET city_name = "" WHERE city_name LIKE("%(CD)%") 

回答

1

您可以使用REPLACE()功能

UPDATE city SET city_name = REPLACE(city_name, '(CD)', '') 
WHERE city_name LIKE("%(CD)%") 
+0

非常感謝。我也想知道如果我想刪除沒有在括號內的確切字符串的單元格。如:(CD)或(XXX)和(YYY)和(ZZZZZ)是否有可能? – Tales

+0

您可以將Regex用作用戶定義函數(UDF)...但是如果您想要一次性解決方案:使用命令將數據庫導出爲SQL文件 - mysqldump -u用戶-p數據庫表> dump.sql或導出在Phpmyadmin中運行,然後使用你最喜歡的文本編輯器進行搜索和替換,然後將SQL導入數據庫。 – outellou

1

如果它總是以「(CD)」結束,要砍那些關底,你可以這樣做:

UPDATE city 
SET city_name = LEFT(city_name, CHAR_LENGTH(city_name) - 5) 
WHERE city_name LIKE '% (CD)'; 
+0

好的,這真的很有幫助,你甚至注意到(CD)之前的額外空間,我沒有。 – Tales

相關問題