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 的字段中的所有值不起作用的主要内容,如果未能解决你的问题,请参考以下文章