2009-01-21 148 views
2

我繼承有大量的數據表像更新日期字段

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 ; 

起始日期日期和結束日期應該有這樣的值MYSQL數據庫:

  • 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年的年末

回答

3

試試這個(請仔細檢查,我沒有測試過這個命令) :

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

小錯字:END_DATE = '0000-00-00' – Riho 2009-01-21 08:42:38

0

我不知道是否DATEADD和DATEDIFF在MySQL存在,但我會強烈建議使用某種日期功能,而不是轉換爲字符串和操縱他們的方式。

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