2

我在 MySQL 数据库中有这两个表,它们相互依赖。目前,DateExpires字段中Table 2的日期需要格式化为yyyy-mm-dd h:m:s 但我试图将其设置为一年,并且在DateJoined字段或 Renewal Month 字段中的第一天Table1,例如:2014-03-01 12:00:00

我一直在尝试根据续订月份DateJoined字段更新它们,但没有给我我正在寻找的结果,我该怎么做?

在此处输入图像描述

4

3 回答 3

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
于 2013-06-26T03:36:12.253 回答
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')
于 2013-06-26T03:36:27.093 回答
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') 
于 2013-06-26T03:41:06.073 回答