【问题标题】:Changing year in mysql date更改mysql日期中的年份
【发布时间】:2013-01-24 00:29:17
【问题描述】:

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

无论原始日期如何,我如何将一年转换为 2013 年。

因此,如果日期是 2009-01-01,它将是 2013-01-01,但如果是 2012-01-04,它将转换为 2013-01-14。

我认为它会简单明了,但我想不通 =/

【问题讨论】:

  • 你的意思是2013-01-04

标签: mysql date


【解决方案1】:

这很简单:

日期时间:

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');

【讨论】:

    【解决方案2】:

    当前答案的问题是没有一个考虑闰年。如果您获取日期“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”。此解决方案的示例如下:

    http://sqlfiddle.com/#!9/c5358/12

    【讨论】:

      【解决方案3】:
      UPDATE tableName
      SET    dateColumn = dateColumn + INTERVAL 4 YEAR
      

      另一种方法是连接它,

      UPDATE Table1
      SET    DateColumn = CONCAT(YEAR(CURDATE()), '-', DATE_FORMAT(dateColumn, '%m-%d'))
      

      【讨论】:

        【解决方案4】:

        任务的当前日期是 2013 年,我知道您希望将当前年份设置为日期。

        UPDATE table_name SET date_col=DATE_FORMAT('2013-05-06',YEAR(CURRENT_DATE)-%m-%d);
        

        【讨论】:

          【解决方案5】:

          如果是日期字段:

            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));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-01
            • 2013-09-23
            • 1970-01-01
            • 2018-04-05
            • 2012-01-20
            • 1970-01-01
            相关资源
            最近更新 更多