我的数据库中有一堆日期存储在标准的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)
当前答案的问题在于,它们都没有考虑到闰年.如果您将日期'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
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)