我在我们的数据库中有一堆以标准mysql date类型存储的日期。
我如何将一年转换到2013年,而不考虑原始日期。
因此,如果日期为2009-01-01,则为2013-01-01;如果日期为2012-01-04,则转换为2013-01-14。
我认为这将是简单和明显的,但我不能弄明白=/
发布于 2013-01-24 09:03:24
这很简单:
对于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');
发布于 2016-03-03 00:50:28
目前的答案存在的问题是,它们都没有考虑到闰年。如果您采用日期'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‘。此解决方案的示例如下所示:
发布于 2013-01-24 08:34:59
如果是日期字段:
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));
https://stackoverflow.com/questions/14491906
复制相似问题