5

次のルールを使用して、特定の日付の週番号と年を MySQL から取得したいと思います。

  • 日付が年末で、翌年の最初の週である場合、週番号として 1 を返す必要があります。
  • 日付が年の初めで、前年の最後の週である場合、週番号として 52 (または 53) を返す必要があります。

MySQL で week 関数を読みましたが、必要な結果が得られません。

日付と時刻関数:WEEK(date[,mode])

私はフランスのカレンダーにいるので、月曜日に週を開始する必要があり、第 1 週は今年の 3 日以上の最初の週です。

したがって、オプション 1 と 3 しか使用できません。

次のクエリを書くと:

  • 週を選択 ('2012-12-31', 3)、結果は 1

  • 週を選択 ('2012-12-31', 1)、結果は 53

2016 年 1 月 1 日にテストすると、次のようになります。

  • 週を選択 ('2016-1-1', 3)、結果は 53

  • 週を選択 ('2016-1-1', 1)、結果は 0

2012-12-31 が翌年であることを検出できないため、オプション 1 は使用できません。

オプション 3 を使用することもできますが、2 つのロジックを追加しています。週番号 = 1 で月 = 12 の場合は年 + 1、週番号 = 53 で月 = 1 の場合は年 - 1 です。

誰かがより良い解決策を持っていますか?

よろしく

4

1 に答える 1

2

わかりました、私はあなたが今やろうとしていることを理解していると思います.

ドキュメントが言うように:

関数が「指定された年の週番号」を返すようにするため、代わりに 0 を返すことにしました。</p>

その週の年の週番号が必要な場合は、YEARWEEK()関数を使用することをお勧めします。これは、 と同じモード引数を取りますWEEK()

指定された日付の週の最初の日を含む年に関して結果を評価したい場合は、次のYEARWEEK()関数を使用します。

 mysql> SELECT YEARWEEK('2000-01-01');
         -> 199952
 mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);
         -> '52'

したがって、使用するもののいくつかの例:

mysql> SELECT MID(YEARWEEK('2012-1-1',3),5,2)
         -> '52'
mysql> SELECT MID(YEARWEEK('2012-12-31',3),5,2)
         -> '01'
于 2012-06-11T10:47:35.907 に答える