首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在mysql日期中更改年份

在mysql日期中更改年份
EN

Stack Overflow用户
提问于 2013-01-24 08:29:17
回答 4查看 31.2K关注 0票数 38

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

我如何将一年转换到2013年,而不考虑原始日期。

因此,如果日期为2009-01-01,则为2013-01-01;如果日期为2012-01-04,则转换为2013-01-14。

我认为这将是简单和明显的,但我不能弄明白=/

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-01-24 09:03:24

这很简单:

对于DATETIME:

代码语言:javascript
复制
UPDATE table_name
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d %T');

对于日期:

代码语言:javascript
复制
UPDATE table_name
SET date_col=DATE_FORMAT(date_col,'2013-%m-%d');
票数 76
EN

Stack Overflow用户

发布于 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,因为它考虑了夏令时。例如:

代码语言:javascript
复制
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

票数 13
EN

Stack Overflow用户

发布于 2013-01-24 08:34:59

如果是日期字段:

代码语言:javascript
复制
  UPDATE table_name SET date_field_name = CONCAT("2013", RIGHT(date_field_name,6));

如果是日期时间字段:

代码语言:javascript
复制
UPDATE table_name SET date_field_name = CONCAT("2013", RIGHT(date_field_name,15));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14491906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档