代码之家  ›  专栏  ›  技术社区  ›  Riho

更新日期字段

sql
  •  2
  • Riho  · 技术社区  · 16 年前

    我继承了MYSQL数据库,该数据库有很多表,其中包含以下数据

    CREATE TABLE IF NOT EXISTS `ejl_registration` (
      `id` int(11) NOT NULL auto_increment,
      `team_id` int(11) default NULL,
      `start_date` date default NULL,
      `end_date` date default NULL,
      PRIMARY KEY  (`id`),
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=88668 ;
    

    start_date和end_date的值应该如下:

    • 2007-1-5, 2007-12-31
    • 2008-1-1, 2008-12-31
    • 2009-1-15,2009-12-31

    但其中一些en_date字段要么为NULL,要么为0000-00-00。 是否有方法通过单个查询更新所有无效的en_date字段,并将其值设置为等于start_date年份的年末

    2 回复  |  直到 16 年前
        1
  •  3
  •   David Hanak    16 年前

    试试这个(请仔细检查,我还没有测试这个命令):

    UPDATE `ejl_registration` SET `end_date`= CONCAT(YEAR(`start_date`),'-12-31')
    WHERE `end_date` IS NULL OR `end_date` = '0000-00-00';
    
        2
  •  0
  •   MatBailie    16 年前

    我不知道MySQL中是否存在DATEADD和DATEDIFF,但我强烈建议使用某种日期函数,而不是转换为字符串并以这种方式操纵它们。

    在MS SQL SERVER中,这可以工作。。。

    UPDATE
        ejl_registration
    SET
        end_date = DATEADD(YEAR, 1 + DATEDIFF(YEAR, 0, start_date), 0)
    WHERE
        (end_date) IS NULL OR (end_date = '0000-00-00')