1

以前に質問を投稿しましたが、適切に回答され、YEARWEEK()関数がデフォルトのモードであるゼロを使用していて、望まない結果が得られていることがわかりました。モードに関してWEEKを参照しているYEARWEEKのマニュアルを読みましたが、モード引数が使用されていない場合は、default_week_format値が使用されると書かれていました。モード6が必要であると判断したため、変数を6に変更するために必要な手順を実行しました。ただし、この変更の影響を受けるのはWEEK()関数のみです。

次の結果が得られます。

SELECT YEARWEEK(NOW())
  201301
SELECT YEARWEEK(NOW(), 6)
  201302
SELECT WEEK(NOW())
  2
SELECT WEEK(NOW(), 6)
  2

これはMySQLの問題ですか、それとも私が間違っていることはありますか?マニュアルを数回読んだところ、YEARWEEKの説明で、「mode引数はWEEK()のmode引数とまったく同じように機能する」と具体的に述べられています。ただし、(WEEKの説明のように)具体的には、「mode引数を省略すると、default_week_formatシステム変数の値が使用されます」とは明記されていません。

何も提供されていない場合、YEARWEEK()は変数の値を使用するべきではありませんか、それとも私はその点で間違っていますか?特に、説明のこの特定の部分で一方が他方を参照しているため、これら2つの関数は同じように動作する必要があるように思われます。

4

1 に答える 1

1

何も提供されていない場合、YEARWEEK()は変数の値を使用するべきではありませんか、それとも私はその点で間違っていますか?

いいえ。

私は議論を理解していますが、これは文書化されているため、予想される動作です。上のドキュメントからdefault_week_format

関数に使用するデフォルトのモード値WEEK()

したがって、このシステム変数はにのみ使用されWEEK()ます。ただし、お気づきのとおり、どちらの関数week_formatも2番目の引数として使用できます。そのため、これをサーバーレベルではなく、わかりやすくするためにコードで設定することをお勧めします。

于 2013-01-09T15:53:55.213 に答える