在mysql日期更改年份

时间:2013-01-24 00:29:17

标签: mysql date

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

无论原始日期如何,我如何将一年转换为2013年。

因此,如果日期为2009-01-01,则为2013-01-01,但如果是2012-01-04,则会转换为2013-01-14。

我认为这很简单明了,但我无法弄明白= /

5 个答案:

答案 0 :(得分:54)

这很简单:

代表DATETIME:

UPDATE table_name
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d %T');

表示日期:

UPDATE table_name
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d');

答案 1 :(得分:8)

当前答案的问题在于,它们都没有考虑到闰年。如果您参加日期' 2016-02-29'并通过连接将其转换为2013年,您将获得这不是有效日期。如果您运行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;

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

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

答案 2 :(得分:6)

UPDATE tableName
SET    dateColumn = dateColumn + INTERVAL 4 YEAR

其他方式是连接它,

UPDATE Table1
SET    DateColumn = CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(dateColumn, '%m-%d'))

答案 3 :(得分:1)

如果是日期字段:

  UPDATE table_name SET date_field_name = CONCAT("2013", RIGHT(date_field_name,6));

如果是日期时间字段:

UPDATE table_name SET date_field_name = CONCAT("2013", RIGHT(date_field_name,15));

答案 4 :(得分:1)

任务的当前日期是2013年,我了解您希望在当前设置当前年份。

UPDATE table_name SET date_col=DATE_FORMAT('2013-05-06',YEAR(CURRENT_DATE)-%m-%d);