2

相互に依存している MySQL データベースにこれら 2 つのテーブルがあります。現在、 のDateExpiresフィールドは、次のよう にTable 2フォーマットされた日付である必要があります。yyyy-mm-dd h:m:sTable12014-03-01 12:00:00

Renewal MonthDateJoinedフィールドに基づいて更新しようとしましたが、探している結果が得られません。どうすればよいですか?

ここに画像の説明を入力

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

どうぞ。更新を行い、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')
于 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 に答える