同じ曜日である 1 年後の新しい日時を教えてくれる MYSQL コードのスニペットを持っている人はいますか?
SELECT new_day = ADDDATE(new_day,INTERVAL 364 DAY) FROM my_table
うるう年以外で動作します。うるう年をうまく処理する方法はありますか?
通常の年が 52 週と 1 日で、うるう年が 52 週と 2 日であることを考えると、新しい日付は、古い年よりも 1 年または 2 日早くなります。通常の年の元日より後の日付、またはうるう年の 1 月 2 日より後の日付の場合、52 週または 364 日を加算すると、翌年の同じ曜日に発生する日付が得られます。月の1日または2日前(または前月末)。
そのため、年の最初の 2 日間をどうするかという問題が残ります。おそらく「来年」が重要なので、2013 年 12 月 31 日が 2013 年 1 月 1 日より 52 週間遅れているという単純な答えは適切ではありません。この場合、SQL で CASE と綴られる条件式を記述する必要があります。
SELECT CASE WHEN YEAR(DATEADD(ref_date, INTERVAL 364 DAY)) = YEAR(ref_date)
THEN DATEADD(ref_date, INTERVAL 371 DAY)
ELSE DATEADD(ref_date, INTERVAL 364 DAY)
END
FROM ...wherever...
うるう年にどのように対処したいですか?月と日付を保存して、364または371が初日に最も近いかどうかを比較し、適切に選択するか、何もせずに2、3年後に不正確に直面します。
* passed_years *は、最初から新しいものごとに増加しています
date_add(last_date、INTERVAL(case when datediff(date_add(saved_date、INTERVAL pass_years YEAR)、date_add(last_date、INTERVAL 371 DAY))<= 3 then 371 else 364 end))DAY)
これのアイデアは、翌年の52週または53週のいずれかを取得することです。うるう年は平日には影響しませんが、既存の問題に「寄与」します。上記の解決策なしで毎年52週間しか追加しない場合、年を追うごとに日付は低くなります。