更新DATE字段

时间:2009-01-21 08:21:30

标签: sql

我继承了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 个答案:

答案 0 :(得分:3)

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

UPDATE `ejl_registration` SET `end_date`= CONCAT(YEAR(`start_date`),'-12-31')
WHERE `end_date` IS NULL OR `end_date` = '0000-00-00';

答案 1 :(得分:0)

我不知道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')