2016-06-07 126 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)]>