我在MYSQL中有一个如下表:
proj_id|hoursWorked|Date.
日期字段的类型为Date
;我想根据基于java的Web应用程序中项目的给定周数检索表中的所有条目。请帮助我实现这一目标。
我无法编写允许我这样做的单个查询。
答案 0 :(得分:5)
不使用类似WHERE WEEK(column)=something
的内容 - 这是性能杀手:它会计算所有行的周数,即使它们不匹配。除此之外,它将无法在此列上使用索引。
而是根据您的数据类型计算绝对开始和结束日期或时间点,然后使用BETWEEN
。这不会对非匹配行进行计算,并允许使用索引。
经验法则:如果您可以在常数和字段上进行计算,请使用前者。
答案 1 :(得分:2)
使用WEEK
select * from your_table
where week(`Date`) = week('2012-12-01')
如果您只想获得本周的记录,可以
select * from your_table
where week(`Date`) = week(curdate())
答案 2 :(得分:2)
使用MySQL WEEK()
函数。
SELECT WEEK(dateColumn)
FROM...
WHERE WEEK(dateColumn) = 1
来自MySQL Docs的
此函数返回日期的周数。两论证形式 WEEK()使您可以指定周是在周日开始还是周日开始 星期一以及返回值是否应该在0到0之间 53或1至53。