在mysql日期更改年份

And*_*las 26 mysql date

我的数据库中有一堆日期存储在标准的mysql日期类型中.

无论原始日期如何,我怎样才能将一年转换到2013年.

因此,如果日期是2009-01-01,那将是2013-01-01,但如果它是2012-01-04,它将转换为2013-01-14.

我觉得它很简单明了,但我无法弄清楚= /

小智 57

这很简单:

对于DATETIME:

UPDATE table_name
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d %T');
Run Code Online (Sandbox Code Playgroud)

日期:

UPDATE table_name
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d');
Run Code Online (Sandbox Code Playgroud)


rec*_*eps 9

当前答案的问题在于,它们都没有考虑到闰年.如果您将日期'2016-02-29'并通过连接转换为2013年,则会得到'2013-02-29',这不是有效日期.如果您运行DATE_FORMAT('2013-02-29','%Y-%m-%d'),结果为null.在这里查看示例:

http://sqlfiddle.com/#!9/c5358/11

更改年份的更好方法是使用DATE_ADD,因为它可以解决夏令时问题.例如:

SELECT
DATE_FORMAT(DATE_ADD(datecol, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(datecol)) YEAR), '%Y-%m-%d') `date`
FROM t;
Run Code Online (Sandbox Code Playgroud)

如果您仍想将所有日期转换为2013而不是当前年份,则可以将CURRENT_DATE()替换为"2013-01-01".这个解决方案的一个例子是:

http://sqlfiddle.com/#!9/c5358/12


Joh*_*Woo 6

UPDATE tableName
SET    dateColumn = dateColumn + INTERVAL 4 YEAR
Run Code Online (Sandbox Code Playgroud)

另一种方法是连接它,

UPDATE Table1
SET    DateColumn = CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(dateColumn, '%m-%d'))
Run Code Online (Sandbox Code Playgroud)