2

同じ曜日である 1 年後の新しい日時を教えてくれる MYSQL コードのスニペットを持っている人はいますか?

SELECT new_day = ADDDATE(new_day,INTERVAL 364 DAY) FROM my_table

うるう年以外で動作します。うるう年をうまく処理する方法はありますか?

4

3 に答える 3

3

通常の年が 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...
于 2013-01-13T16:02:15.913 に答える
1

うるう年にどのように対処したいですか?月と日付を保存して、364または371が初日に最も近いかどうかを比較し、適切に選択するか、何もせずに2、3年後に不正確に直面します。

  • * saved_date *は、それに基づいて新しい日付が作成される前の最初の日付です
  • * 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週間しか追加しない場合、年を追うごとに日付は低くなります。

于 2013-01-13T15:32:09.857 に答える