2014-02-24 64 views
3

如果我的表中有一列是字符串列表,那么如何在表中的列表中追加一个新条目(对于所有行)列表?MySql - 将字符串追加到列表中的特定位置

for example: 
apple, orange, peach, banana,.... 

所以在这里,让我们说,我想进入peach到每一行后追加lemon。我知道一个事实,即每一行都会出现“桃子”,它只出现一次(桃子在列表中的位置可能不同,列表中其他项目的出现可能会有所不同)。提前致谢!

我试图(但没有成功)

UPDATE TABLE_NAME 
concat (COLUMN_NAME, 'lemon') 
where COLUMN_NAME like '%peach,%'; 
+0

苹果,桃子,橘子是苹果,桃子,柠檬,橙子还是苹果,桃子,橙子,柠檬? (或其他事情:)) –

+0

Apple,orange,peach,lemon,banana,... – crazyim5

+0

你的意思是'REPLACE(COLUMN_NAME,'桃','桃,柠檬')' – bansi

回答

5
UPDATE TABLE_NAME 
set COLUMN_NAME= replace(COLUMN_NAME, 'peach','peach,lemon') 
where COLUMN_NAME like '%peach,%'; 
+0

感谢您的快速回复 – crazyim5

+0

让我们希望,重复将不存在。 –

+0

不,在任何一行中都没有桃的重复。我试图做一个特定的行(验证),并得到相同的数据截断警告。 – crazyim5

1

您可以尝试像下面

create table test(test VARCHAR(255)); 
Query OK, 0 rows affected (0.26 sec) 

INSERT INTO test VALUES('apple, orange, peach, banana,....'); 
Query OK, 1 row affected (0.00 sec) 

SELECT * FROM test; 
+-----------------------------------+ 
| test        | 
+-----------------------------------+ 
| apple, orange, peach, banana,.... | 
+-----------------------------------+ 
1 row in set (0.00 sec) 

UPDATE test SET test = REPLACE(test,'peach,','peach,lemon,') WHERE test like '%peach,%'; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

SELECT * FROM test; 
+-----------------------------------------+ 
| test         | 
+-----------------------------------------+ 
| apple, orange, peach,lemon, banana,.... | 
+-----------------------------------------+ 
1 row in set (0.00 sec) 
+0

感谢您的快速回复。不幸的是,它不起作用,我收到警告“第1行的列COLUMN_NAME的数据被截断”,并且警告代码为1265 – crazyim5

+0

@ crazyim5然后您的字段被定义为太短。例如,将字段定义为VARCHAR(5)并尝试插入6个字符时,会发生此警告。 –

1

如果字符串'peach'不会出现在其他任何价值的一部分“列表”(也就是说,例如,不存在例如列表中出现的任何字词,例如'impeach''peachtree',那么您可以使用REPLACE字符串fu nction找到'peach'出现,并与'peach,lemon'

例如替换:

UPDATE mytable 
    SET mycol = REPLACE(mycol, 'peach', 'peach,lemon') 

在更一般的情况下,你可能没有足够的保证'peach'是不是其他条款的部分内容在列表中,表达这样做会更复杂。

+0

这是个好主意。幸运的是,在列表中没有任何弹夹或任何其他子串版本的桃子。 – crazyim5

1
update tblname 
set clm_name= replace(clm_name,'peach','peach,lemon') 
where clm_name like '%peach%'; 
相关问题