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

Posted

技术标签:

【中文标题】SQL UPDATE 带有附加字符串 CONCAT 的字段中的所有值不起作用【英文标题】:SQL UPDATE all values in a field with appended string CONCAT not working 【发布时间】:2011-05-06 21:55:16 【问题描述】:

这是我想做的:

当前表:

+----+-------------+  
| 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 版)

谢谢大家。

【问题讨论】:

您是否真的尝试过您的查询?它应该“正常工作” 是的,我试过了。我认为它也应该可以工作。 这是我的“真实生活”返回:[SQL] UPDATE questions_national SET cat_id = CONCAT(cat_id,'a') 受影响的行:0 时间:0.069 毫秒 cat_id 是字符字段(varchar、文本等)还是数字? 对我不起作用(SQL 2012)所以我尝试“update t set data=data+'a'”工作正常.. 【参考方案1】:

这就是你所需要的:

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 上测试这个

【讨论】:

4.1 中的concat 函数看起来一样 - dev.mysql.com/doc/refman/4.1/en/… 解决了。事实证明,该列的字符集是有限的,它可以接受、更改它,现在查询可以正常工作了。 我有一些相同的情况,除了我想用单引号替换所有双引号。有什么建议我该怎么做? 这是一个很好的答案,但有点令人困惑,因为在我的服务器上,“数据”是一个关键字。也许一个不那么模棱两可的例子是:UPDATE table SET column_name=concat(column_name, 'string');【参考方案2】:

带有空值的CONCAT返回null,所以最简单的解决方案是:

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

【讨论】:

完美解决方案。【参考方案3】:

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

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

改用CONCAT_WS:

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

【讨论】:

【参考方案4】:
UPDATE 
    myTable
SET 
    col = CONCAT( col , "string" )

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

解决办法是:

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

那个有效。

【讨论】:

【参考方案5】:
UPDATE mytable SET spares = CONCAT(spares, ',', '818') WHERE id = 1

不适合我。

spares 默认为NULL,但其varchar

【讨论】:

看来,如果默认值为 NULL 则不起作用。它必须是一个空字符串 UPDATE mytable SET spares = CONCAT(COALESCE(spares, ''), ',', '818') WHERE id = 1 这行得通。当它遇到空值时,它使用一个空白字符串''【参考方案6】:

解决了。事实证明,该列的字符集是有限的,它可以接受、更改它,现在查询可以正常工作了。

【讨论】:

【参考方案7】:

你可以这样做:

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 + value 在 field 为空时不起作用。

【讨论】:

你真的可以在 mysql 中将 + 与字符串一起使用吗?

以上是关于SQL UPDATE 带有附加字符串 CONCAT 的字段中的所有值不起作用的主要内容,如果未能解决你的问题,请参考以下文章

带有字符的Django concat F函数

请教SQL的一个问题~,如何在update时向某个列的值追加字符?

python-sql语句集体更改数据

mysql concat update中拼接字符串

sql注入之 update/insert/delete篇

如何在没有附加查询的情况下在 SQL Server 中连接没有子查询的 GROUP BY 子句中的字符串?