我的数据库中有一堆日期存储在标准 mysql 日期类型中。
无论原始日期如何,我如何将一年转换为 2013 年。
因此,如果日期是 2009-01-01,它将是 2013-01-01,但如果是 2012-01-04,它将转换为 2013-01-14。
我认为这很简单明了,但我想不通=/
这很简单:
日期时间:
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');
当前答案的问题是它们都没有考虑闰年。如果您获取日期“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'。此解决方案的示例如下:
UPDATE tableName
SET dateColumn = dateColumn + INTERVAL 4 YEAR
另一种方法是连接它,
UPDATE Table1
SET DateColumn = CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(dateColumn, '%m-%d'))
如果它是一个日期字段:
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 年,我知道您希望将当前年份设置为日期。
UPDATE table_name SET date_col=DATE_FORMAT('2013-05-06',YEAR(CURRENT_DATE)-%m-%d);