Mysql 根据其他表中的月份更新表

Mysql 根据其他表中的月份更新表,mysql,Mysql,我在MySQL数据库中有这两个相互依赖的表。 目前,表2中的DateExpires字段需要是格式为yyyy-mm-dd h:m:s 但我试图将其设置为一年,从日期加入的字段或表1中的续订月份字段开始计算,如:2014-03-01 12:00:00 我一直在尝试根据续订月份和加入日期字段更新它们,但没有任何结果,我要怎么做 使用DATE\u ADD添加年份,使用DATE\u格式转换为所需格式: UPDATE Table2 SET DateExpires = DATE_FORMAT(DATE_ADD

我在MySQL数据库中有这两个相互依赖的表。 目前,
表2中的DateExpires字段需要是格式为
yyyy-mm-dd h:m:s
但我试图将其设置为一年,从日期加入的字段或
表1中的续订月份字段开始计算,如:
2014-03-01 12:00:00

我一直在尝试根据续订月份和加入日期字段更新它们,但没有任何结果,我要怎么做


使用DATE\u ADD添加年份,使用DATE\u格式转换为所需格式:

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和2)以及一个月名称派生表连接起来,以映射到一个月编号。您正在将
t2.DateExpires
设置为来自联接的值的串联

下面是它工作的演示:

试试这个:

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

他不想简单地增加一年。他想要明年的“续订月”。基于以下问题,您无法确定
RenewalDate
是否为
%M
@StevenMoseley-您假设是在构建派生表时:)。我认为这是一个非常安全的假设。是的,但我这样做是因为如果值不正确,可以编辑派生表。一个函数不能。但无论如何+1,因为这对某些人来说是一个有用的解决方案。嗯,遇到了一些麻烦,它似乎还将一些记录更新为
0001-01-01 12:00:00
,而不是实际日期。您是否有
DateJoined
为空的记录?添加了
COALESCE
来处理
DateJoined
中的
null
值(在这些情况下填写当前年份)啊,这是我的错误,一些
DateJoined
字段有“0000-00-00”,谢谢!哦-最后一次编辑。。。忘记了
NOW()上的
YEAR()
函数
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')