从另一个表更新基于Month的表

时间:2013-06-26 03:28:06

标签: mysql

我在MySQL数据库中有这两个相互依赖的表。 目前,Table 2中的 DateExpires 字段必须是格式为yyyy-mm-dd h:m:s的日期 但是我试图让它成为一年,第一天来自 DateJoined 字段或Table1中的续订月字段,例如:2014-03-01 12:00:00

我一直在尝试根据续订月 DateJoined 字段更新它们,但没有任何内容可以提供我正在寻找的结果,我该怎么做?

enter image description here

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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')

答案 2 :(得分: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')