2016-06-07 55 views
0

取代我的表保存相同的ID這樣的:123,9901,888,99MySQL的更新與CONCAT

我需要改變一些ID在該領域

我用我的SQL:讓9901更改爲2001

UPDATE `TALBE_` SET id_group = REPLACE (id_group, '9901', '2001'); 

這是工作

但是,我改變99至100

UPDATE `TALBE_` SET id_group = REPLACE (id_group, '99', '100'); 

我的SQL FIDLE已轉變成

123,,888,100

如何只是改變99 - > 100,不改變9901?

我需要使用concat嗎?

但是我測試了一段時間仍然無法做到這一點

+2

決不存儲在多個值一個領域。改變你的表設計是這個問題的唯一真正的解決方案 –

+0

謝謝你的提醒 但是,迫切需要使用這個sql我需要修改系統發生的問題 – Sky

回答

3

可以使用例如

UPDATE `TALBE_` SET id_group = 
    trim(',' from REPLACE(concat(',', id_group, ','), ',99,', ',100,')); 
+0

謝謝,謝謝你讓我知道我可以使用trim( ) – Sky

1

她尋求數的版本替換它

您必須將搜索值的2倍

SELECT CONCAT_WS (',', 
     SUBSTRING_INDEX(id_group, ',', FIND_IN_SET('888',id_group)-1) 
     ,'100', 
     SUBSTRING_INDEX(id_group, ',', --1* (LENGTH(REGEXP_REPLACE(id_group,'[0-9]','')) -(FIND_IN_SET('888',id_group)-1))) 
    ); 

樣品

MariaDB [(none)]> SELECT CONCAT_WS (',', 
    ->  SUBSTRING_INDEX('123,9901,888,99', ',', FIND_IN_SET('888','123,9901,888,99')-1) 
    ->  ,'100', 
    ->  SUBSTRING_INDEX('123,9901,888,99', ',', --1* (LENGTH(REGEXP_REPLACE('123,9901,888,99','[0-9]','')) -(FIND_IN_SET('888','123,9901,888,99')-1))) 
    ->  ); 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| CONCAT_WS (',', 
     SUBSTRING_INDEX('123,9901,888,99', ',', FIND_IN_SET('888','123,9901,888,99')-1) 
     ,'100', 
     SUBSTRING_INDEX('123,9901,888,99', ',', --1* (LENGTH(REGEXP_REPLACE('123,9901,888,99','[0-9]','')) -(FIND_IN_SET('888','123,9901,888,9 | 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| 123,9901,100,123                                                             | 
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
1 row in set (0.00 sec) 

MariaDB [(none)]>