38

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

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

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

我认为这很简单明了,但我想不通=/

4

5 回答 5

79

这很简单:

日期时间:

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');
于 2013-01-24T01:03:24.403 回答
14

当前答案的问题是它们都没有考虑闰年。如果您获取日期“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;

如果您仍想将所有日期转换为 2013 而不是当前年份,则可以将 CURRENT_DATE() 替换为 '2013-01-01'。此解决方案的示例如下:

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

于 2016-03-02T16:50:28.473 回答
9
UPDATE tableName
SET    dateColumn = dateColumn + INTERVAL 4 YEAR

另一种方法是连接它,

UPDATE Table1
SET    DateColumn = CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(dateColumn, '%m-%d'))
于 2013-01-24T00:30:31.620 回答
2

如果它是一个日期字段:

  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));
于 2013-01-24T00:34:59.067 回答
2

任务的当前日期是 2013 年,我知道您希望将当前年份设置为日期。

UPDATE table_name SET date_col=DATE_FORMAT('2013-05-06',YEAR(CURRENT_DATE)-%m-%d);
于 2015-11-06T17:26:15.403 回答