我的数据库中有一堆日期存储在标准的mysql日期类型中。
无论原始日期如何,我如何将一年转换为2013年。
因此,如果日期为2009-01-01,则为2013-01-01,但如果是2012-01-04,则会转换为2013-01-14。
我认为这很简单明了,但我无法弄明白= /
答案 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而不是当前年份。这个解决方案的一个例子是:
答案 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);