2013-06-26 96 views
2

我有這兩個表在一個MySQL數據庫中相互依賴。 目前需要進行的日期格式爲yyyy-mm-dd h:m:sTable 2DateExpires場,但我想要得到它是一年,從DateJoined場或Table1續訂月份場,像第一天:2014-03-01 12:00:00基於從另一個表中的月份更新表

我一直在試圖基於該續約月DateJoined現場對其進行更新,但沒有給我結果即時尋找,我該怎麼辦呢?

enter image description here

回答

1

你在這裏。您將執行更新,將兩個表(1和2)以及衍生的月份名稱表映射到月份編號。您將t2.DateExpires設置爲來自連接的串聯值。

下面是它的工作演示:http://sqlfiddle.com/#!2/a388d/1

UPDATE `Table1` AS `t1` 
    INNER JOIN `Table2` AS `t2` 
     ON `t2`.`IDMember` = `t1`.`ID` 
    INNER JOIN (
     SELECT '01' AS `number`, 'Jan' AS `name` 
     UNION SELECT '02', 'Feb' 
     UNION SELECT '03', 'Mar' 
     UNION SELECT '04', 'Apr' 
     UNION SELECT '05', 'May' 
     UNION SELECT '06', 'Jun' 
     UNION SELECT '07', 'Jul' 
     UNION SELECT '08', 'Aug' 
     UNION SELECT '09', 'Sep' 
     UNION SELECT '10', 'Oct' 
     UNION SELECT '11', 'Nov' 
     UNION SELECT '12', 'Dec' 
    ) AS `m` ON `m`.`name` = `t1`.`RenewalMonth` 
SET `t2`.`DateExpires` = CONCAT(
        IF(YEAR(`t1`.`DateJoined`), YEAR(`t1`.`DateJoined`), YEAR(NOW())) + 1, 
        '-', `m`.`number`, '-01 00:00:00') 
+0

這正是我所需要的!非常感謝你! – Tower

+0

@Tower - 乾杯。 –

+0

好吧,遇到了一些麻煩,它似乎也更新了一些記錄,而不是實際的日期,而是「0001-01-01 12:00:00」。 – Tower

1

使用DATE_ADD增加一年,DATE_FORMAT轉換爲所需的格式:

UPDATE Table2 
SET DateExpires = DATE_FORMAT(DATE_ADD(t1.DateJoined, 'INTERVAL 1 YEAR'), '%Y-%m-%d %h:%i:%s') 
FROM Table1 t1 
WHERE IDMember = t1.ID 

如果你想的依據是RenewalMonth,你可以做這樣的:

UPDATE Table2 
SET DateExpires = DATE_FORMAT(DATE_ADD(STR_TO_DATE(
    concat(t1.RenewalMonth, ' ', 
      DAY(t1.DateJoined), ', ', 
      YEAR(t1.DateJoined)), '%M %d,%Y'), 
    'INTERVAL 1 YEAR'), '%Y-%m-%d %h:%i:%s') 
FROM Table1 t1 
WHERE IDMember = t1.ID 
+0

他並不想簡單地每年增加。他希望明年的「續約月」。 –

+0

@StevenMoseley:好點 - 更新。 – PinnyM

+0

根據'RenewalDate'爲'%M'的問題,您無法確定。 –

0

試試這個:

update table2 as t2 
inner join table1 as t1 on t2.IDMember = t1.ID 
set DateExpires = date_format(date_add(t1.DateJoined, 'interval 1 year'), '%Y-%m-%d 12:00:00') 
相關問題