我有以下数据
| 2015-08-30 01:23:01 |
| 2015-08-30 03:14:50 |
| 2015-08-30 04:29:55 |
| 2015-08-30 09:18:57 |
| 2015-08-30 13:36:51 |
| 2015-08-31 02:19:33 |
| 2015-08-31 03:14:59 |
| 2015-08-31 04:33:10 |
| 2015-08-31 10:56:42 |
| 2015-08-31 12:25:54 |
| 2015-09-01 02:29:00 |
| 2015-09-01 03:19:40 |
| 2015-09-01 04:47:51 |
| 2015-09-01 13:56:06 |
| 2015-09-02 03:15:13 |
| 2015-09-02 03:35:53 |
| 2015-09-02 04:16:31 |
| 2015-09-03 03:12:03 |
| 2015-09-03 03:37:21 |
| 2015-09-03 05:01:30 |
上方数据是表datetime
中的build
列
现在我需要编写查询以完成以下操作
1:将年份从2015年更改为2019年,然后将所有内容保持原样
这就是我编写查询的方式
mysql> UPDATE buildinfo SET datetime = '2019%' where datetime = (select a.datetime from buildinfo as a where datetime LIKE '2015%');
ERROR 1093 (HY000): You can't specify target table 'buildinfo' for update in FROM clause
mysql>
我不确定该怎么写。我看过很多文档,其中一些文档提到了INNER JOIN,但无法理解。
请提出建议
答案 0 :(得分:2)
尝试一下
UPDATE buildinfo set datetime = replace(datetime, '2015', '2019') where datetime LIKE '2015%';
它将在datetime栏中将2015年更改为2019年,并保留所有内容。
答案 1 :(得分:1)
datetime值并不总是一个字符串,您可能在MySQL-8.0中发现它们不起作用。幸运的是,这里有大量的date and time functions。
所以:
UPDATE buildinfo
SET datetime=DATE_ADD(datetime, INTERVAL 4 YEAR)
WHERE datetime BETWEEN '2015-01-01 00:00:00' AND '2015-12-31 23:59:59'
答案 2 :(得分:1)
在年份为2015年的日期中添加4年:
UPDATE buildinfo
SET datetime = DATE_ADD(datetime, INTERVAL 4 YEAR)
WHERE YEAR(datetime) = 2015;
请参见demo。
答案 3 :(得分:1)
如果更新
UPDATE
buildinfo
SET datetime = '2019%'
where datetime = (
select
a.datetime
from
buildinfo as a
where datetime LIKE '2015%'
);
是正确的,因为我没有检查。
您可以对其进行一些重写,以便MySQL确实接受它而不会给出错误。
UPDATE
buildinfo
SET datetime = '2019%'
where datetime = (
select alias.datetime from(
select
a.datetime
from
buildinfo as a
where datetime LIKE '2015%'
) alias
);
但是,当您查看示例表/数据时,以下查询会更好。
UPDATE
buildinfo
SET
buildinfo.datetime = buildinfo.datetime + INTERVAL 4 YEAR
WHERE
YEAR(buildinfo.datetime) = 2015
答案 4 :(得分:0)
请尝试将DATE_FORMAT用于更新查询
UPDATE buildinfo
SET `datetime` = DATE_FORMAT(`datetime`,'2019-%m-%d %T')
WHERE YEAR(`datetime`) = '2015';
答案 5 :(得分:0)
使用字符串匹配功能替代danblacks答案:
data = [{'a' : 1, 'b': 1, 'c': 1},
{'a' : 2, 'b': 2, 'c': 2},
{'a' : 3, 'b': 3, 'c': 3},
{'a' : 4, 'b': 4, 'c': 4},
{'a' : 5, 'b': 5, 'c': 5},
{'a' : 1, 'b': 2, 'c': 3},
{'a' : 4, 'b': 5, 'c': 1},
{'a' : 3, 'b': 4, 'c': 5},
]
pd.DataFrame(data)
不过,danblacks的做法是正确的。我建议使用他的答案。