相互に依存している MySQL データベースにこれら 2 つのテーブルがあります。現在、 のDateExpiresフィールドは、次のよう
にTable 2
フォーマットされた日付である必要があります。yyyy-mm-dd h:m:s
Table1
2014-03-01 12:00:00
Renewal MonthとDateJoinedフィールドに基づいて更新しようとしましたが、探している結果が得られません。どうすればよいですか?
相互に依存している MySQL データベースにこれら 2 つのテーブルがあります。現在、 のDateExpiresフィールドは、次のよう
にTable 2
フォーマットされた日付である必要があります。yyyy-mm-dd h:m:s
Table1
2014-03-01 12:00:00
Renewal MonthとDateJoinedフィールドに基づいて更新しようとしましたが、探している結果が得られません。どうすればよいですか?
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
どうぞ。更新を行い、2 つのテーブル (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')
これを試して:
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')