我在 MYSQL 中有一个如下表:
proj_id|hoursWorked|Date.
日期字段的类型为Date
; 我想根据我的基于 Java 的 Web 应用程序中项目的给定周数从表中检索所有条目。请帮助我实现这一目标。
我无法编写允许我这样做的单个查询。
不要使用类似的东西WHERE WEEK(column)=something
- 这是一个性能杀手:它会计算所有行的周数,即使它们不匹配。除此之外,它将无法在此列上使用索引。
而是根据您的数据类型计算绝对开始和结束日期或时间点,然后使用BETWEEN
. 这将不对不匹配的行进行计算,并允许使用索引。
经验法则:如果您可以在常数计算和字段计算之间进行选择,请使用前者。
使用周
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() 的两个参数形式使您可以指定星期是从星期日还是星期一开始,以及返回值应在 0 到 53 或 1 到 53 的范围内。