私はMYSQLで次のようなテーブルを持っています:
proj_id|hoursWorked|Date.
日付フィールドのタイプはDate
; Java ベースの Web アプリケーションで、プロジェクトの特定の週番号に応じて、テーブルからすべてのエントリを取得したいと考えています。これを達成するのを手伝ってください。
それを可能にする単一のクエリを書くことができません。
次のようなものは使用しないでくださいWHERE WEEK(column)=something
- これはパフォーマンス キラーです。一致しない場合でも、すべての行の週番号を計算します。それに加えて、この列でインデックスを使用できなくなります。
代わりに、データ型に応じて、絶対的な開始日と終了日または時点を計算してから、 を使用しますBETWEEN
。これにより、一致しない行に対して計算が行われず、インデックスの使用が許可されます。
経験則: 定数の計算とフィールドの計算のどちらかを選択できる場合は、前者を使用してください。
WEEKを使用
select * from your_table
where week(`Date`) = week('2012-12-01')
今週のレコードのみを取得したい場合は、次のことができます
select * from your_table
where week(`Date`) = week(curdate())
MySQLWEEK()
関数を使用します。
SELECT WEEK(dateColumn)
FROM...
WHERE WEEK(dateColumn) = 1
MySQL ドキュメントから
この関数は、日付の週番号を返します。WEEK() の 2 つの引数形式を使用すると、週の開始日を日曜日にするか月曜日にするか、および戻り値の範囲を 0 から 53 にするか 1 から 53 にするかを指定できます。