SQL UPDATE带有附加字符串CONCAT的字段中的所有值不起作用


159

这是我想做的:

当前表:

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | max         |  
|  2 | linda       |  
|  3 | sam         |  
|  4 | henry       |  
+----+-------------+  

神秘查询(类似"UPDATE table SET data = CONCAT(data, 'a')"

结果表:

+----+-------------+  
| id | data        |  
+----+-------------+  
|  1 | maxa        |  
|  2 | lindaa      |  
|  3 | sama        |  
|  4 | henrya      |  
+----+-------------+  

而已!我只需要在单个查询中执行此操作,但似乎找不到方法。我在bluehost上使用mySQL(我认为它的版本为4.1)

感谢大家。


5
您是否实际尝试过查询?它应该“正常工作”
Phil

是的,我已经尝试过了。我认为它也应该起作用。
Fresheyeball 2010年

这是我的“现实生活”返回:[SQL]更新questions_national SET cat_id = CONCAT(cat_id,'a')受影响的行:0时间:0.069ms
Fresheyeball 2010年

cat_id字符字段(varchar,文本等)还是数字?
Phil

不是为我工作(SQL 2012),所以我尝试了“更新t将数据=数据+‘A’”工作正常..

Answers:


257

那几乎就是您所需要的:

mysql> select * from t;
+------+-------+
| id   | data  |
+------+-------+
|    1 | max   |
|    2 | linda |
|    3 | sam   |
|    4 | henry |
+------+-------+
4 rows in set (0.02 sec)

mysql> update t set data=concat(data, 'a');
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from t;
+------+--------+
| id   | data   |
+------+--------+
|    1 | maxa   |
|    2 | lindaa |
|    3 | sama   |
|    4 | henrya |
+------+--------+
4 rows in set (0.00 sec)

尽管我正在5.1.41上对此进行测试,但是不确定为什么会遇到麻烦


1
concat4.1功能看起来是一样的- dev.mysql.com/doc/refman/4.1/en/...
菲尔-

12
解决了。原来,该列具有可接受的有限字符集,对其进行了更改,现在查询工作正常。
Fresheyeball 2010年

我有一些相同的senario,除了我想用单引号替换所有双引号。有什么建议我该怎么做?
Shaonline '17

这是一个很好的答案,但是有些混乱,因为在我的服务器上,“数据”是一个关键字。也许不那么模棱两可的例子是:UPDATE table SET column_name=concat(column_name, 'string');
Kiky Rodriguez

38

带有空值的CONCAT返回空值,因此最简单的解决方案是:

更新myTable SET备件= IFNULL(CONCAT(备件,“字符串”),“字符串”)


11
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

不为我工作。

NULL默认情况下,备用件是varchar


5
似乎,如果默认情况下该值为NULL则不起作用。它必须是一个空字符串
DS_web_developer 2012年

9

NULL通过将其包装在空字符串中来转换值COALESCE

"UPDATE table SET data = CONCAT(COALESCE(`data`,''), 'a')"

要么

改用CONCAT_WS

"UPDATE table SET data = CONCAT_WS(',',data, 'a')"

8

解决了。原来,该列具有可接受的有限字符集,对其进行了更改,现在查询工作正常。


8
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

无法解决。请求语法正确,但是执行时“影响0行”。

解决方案是:

UPDATE 
    myTable 
SET 
    col = CONCAT( myTable.col , "string" )

那工作。


2

你可以这样做:

Update myTable
SET spares = (SELECT CASE WHEN spares IS NULL THEN '' ELSE spares END AS spares WHERE id = 1) + 'some text'
WHERE id = 1

当field为null时,field = field + value不起作用。


你真的可以在MySQL中对字符串使用+吗?
Sudhir N
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.