SQL UPDATE语句使用CONCAT附加字符串更新字段中的所有值无效。

201

我想要做的是:

当前表格:

+----+-------------+  
| 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
这是我的“真实”返回值:[SQL] UPDATE questions_national SET cat_id = CONCAT(cat_id,'a')受影响的行数:0 时间:0.069毫秒 - Fresheyeball
cat_id 是字符字段(varchar、text等)还是数值型的? - Phil
对我来说(SQL 2012)无法工作,所以我尝试了“update t set data=data+'a'”,现在可以正常工作了。 - Silver
8个回答

328
那基本上就是你所需要的了:
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
4.1版本中的concat函数看起来与此相同- http://dev.mysql.com/doc/refman/4.1/en/string-functions.html#function_concat - Phil
14
解决了。原来该列只接受有限的字符,更改后查询正常运行。 - Fresheyeball
我有一个类似的情况,只是我想用单引号替换所有双引号。有什么建议吗? - Shaonline
2
这是一个很好的答案,但有点令人困惑,因为在我的服务器上,“data”是一个关键字。也许一个不那么模棱两可的例子是: UPDATE table SET column_name=concat(column_name, 'string'); - Kiky Rodriguez

47

如果使用 CONCAT 函数连接一个空值,结果会返回 null,因此最简单的解决方案如下:

UPDATE myTable SET spares = IFNULL (CONCAT( spares , "string" ), "string")

(注意:已保留原文中的 HTML 标签)

完美的解决方案。 - REMITH

18

使用COALESCENULL值转换为空字符串。

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

或者

使用CONCAT_WS替代:

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

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

我无法解决这个问题。请求语法是正确的,但执行时却显示“0行受影响”。

解决方法是:

UPDATE 
    myTable 
SET 
    col = CONCAT( myTable.col , "string" )
那个有效了。

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

对我没用。

默认情况下,spares为null,但它是varchar类型。


5
似乎默认值是NULL时不起作用,必须是空字符串。 - DS_web_developer
UPDATE mytable SET spares = CONCAT(COALESCE(spares, ''), ',', '818') WHERE id = 1。这将起作用。当遇到空值时,它使用空字符串''。 - pbarney

9

问题已解决。原来该列只能接受有限的字符,我进行了更改,现在查询正常运行。


4
您可以这样做:
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为空时,field = field + value不起作用。


你真的可以在MySQL中使用+来连接字符串吗? - Sudhir N

0
UPDATE table_name SET column_name = CONCAT('text', column_name)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接