【发布时间】:2012-01-20 14:41:12
【问题描述】:
我有一堆 YYYY-MM-DD 格式的日期
但我有 2020-MM-DD 的一整年
我想改成2011-MM-DD
我怎样才能做到这一点?
【问题讨论】:
-
相关列的数据类型是什么?
-
列的数据类型为日期
-
This 一个更简单的解决方案
标签: mysql datetime date sql-update
我有一堆 YYYY-MM-DD 格式的日期
但我有 2020-MM-DD 的一整年
我想改成2011-MM-DD
我怎样才能做到这一点?
【问题讨论】:
标签: mysql datetime date sql-update
我想补充一点(对于问题的更多访问者),您还可以比使用 ADDDATE 函数的 ADDDATE 语句更快地“更新”,我认为更快,而 ADDDATE大约拿了它。 1 小时影响 2.3 万亿行 SUBDATE 缩短了一半时间。
UPDATE Table SET DateTimeField = SUBDATE(DateTimeField, INTERVAL -x YEAR);
其中 x 是您要添加为新年值的负数。 老实说,我忽略了为什么会发生这种情况,但它确实有效。
【讨论】:
使用ADDDATE(old_date, INTERVAL -9 YEAR)
【讨论】:
UPDATE YourTable
SET YourDateColumn = ADDDATE(YourDateColumn, INTERVAL 1 YEAR)
WHERE YourDateColumn >= '2010-01-01'
AND YourDateColumn <= '2010-12-31';
如果您的表格在日期字段上没有索引,您可以解决这个问题:
UPDATE YourTable
SET YourDateColumn = ADDDATE(YourDateColumn, INTERVAL 1 YEAR)
WHERE YEAR(YourDateColumn) = 2010;
要解决 2020 年到 2021 年的日期问题,请运行以下命令:
UPDATE YourTable
SET YourDateColumn = ADDDATE(YourDateColumn, INTERVAL -1 YEAR)
WHERE YEAR(YourDateColumn) = 2021;
顺便说一句,由于我复制了 Joe Stefanelli 的原始代码,为他 +1 !!!
【讨论】:
UPDATE YourTable
SET YourDateColumn = SUBDATE(YourDateColumn, INTERVAL 9 YEAR);
【讨论】:
SUBDATE(YourDateColumn, INTERVAL 9 YEAR) 我已经编辑了答案以反映这一点。