基于日期的Mysql查询?

时间:2013-09-19 18:46:19

标签: php mysql

我有一张这样的表

id | date | content
1  | 09-16-2013 | content 1 here
2  | 09-23-2013 | content 2 here 
3  | 09-30-2013 | content 3 here

我想显示该日期一周内容。例如,第一个内容应该从2013年9月16日开始,然后显示到2013年9月22日深夜。然后在第二天,它改为内容2。 同样,当我在内容2上时,我希望显示“上周内容”,然后只显示之前的内容..我想我可以通过检查当前日期然后显示下面的任何内容来做到这一点。

我不太擅长这些mysql查询,请指教!

此致

6 个答案:

答案 0 :(得分:1)

我猜你正在寻找像这样的东西

SELECT * 
  FROM table1
 WHERE date BETWEEN CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY
                AND CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY

此查询将获取date列在当前日历周(从星期一到星期日)的边界内的行。

WEEKDAY() function 返回日期的工作日索引(0 =星期一,1 =星期二,... 6 =星期日)。表达式

CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY

返回当前日历周的星期日和

CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY

返回当前日历周的星期日。 在BETWEEN子句中使用WHERE可确保查询仅返回date值在这两个日期(星期一到星期日)之间的行。

注意:确保您在date列上有索引。此查询是索引友好的。

今天日期的样本输出(2013年9月19日):

+------+------------+----------------+
| id   | date       | content        |
+------+------------+----------------+
|    1 | 2013-09-16 | content 1 here |
+------+------------+----------------+

更新:要获取上一个日历周的记录,您只需从BETWEEN

中的两个值中减去1周间隔
SELECT * 
  FROM table1
 WHERE date 
   BETWEEN CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY - INTERVAL 1 WEEK,
       AND CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY - INTERVAL 1 WEEK

答案 1 :(得分:0)

试试这个

SELECT * FROM table WHERE date BETWEEN '09-16-2013' AND '09-22-2013';

答案 2 :(得分:0)

关键字为WEEK()

SELECT id,date, CONCAT('content ',WEEK(date),' to here') as content  FROM table_name

答案 3 :(得分:0)

SELECT * 
FROM table
WHERE date BETWEEN '9/16/2013 00:00:00.00' AND '9/22/2013 00:00:00.00'

答案 4 :(得分:0)

要动态选择,请尝试

SELECT * FROM `yourTable` WHERE NOW() >= STR_TO_DATE(`date`, '%m-%d-%Y') ORDER BY STR_TO_DATE(`date`, '%m-%d-%Y') DESC LIMIT 1

或t

SELECT * FROM `yourTable` WHERE CURDATE() >= STR_TO_DATE(`date`, '%m-%d-%Y') ORDER BY STR_TO_DATE(`date`, '%m-%d-%Y') DESC LIMIT 1

sqlfiddle示例 - http://sqlfiddle.com/#!2/62982/4

答案 5 :(得分:0)

您可以将周偏移替换为您的需求

SET @weekOffset = +2;
SELECT * FROM test
WHERE WEEK(`date`) = WEEK(NOW()) + @weekOffset;

查看有效的演示here