我有一张这样的表
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查询,请指教!
此致
答案 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
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