2014-01-09 42 views
0

我想知道如何從上週選擇所有數據?週一到週五之間,假設今天是星期一。我其實沒有日期時間格式列。MySQL從上週選擇數據

這裏是我試過到目前爲止:

SELECT * FROM logs 
WHERE WEEKDAY(CONCAT(year,'-',month,'-',day)) BETWEEN 0 AND 4 
AND YEARWEEK(date_added2) = YEARWEEK(CURRENT_DATE() - INTERVAL 7 DAY) AND deleted='n'; 

這是我的表,表日誌:

enter image description here

回答

0

你能試試嗎?你可以在這裏測試http://www.sqlfiddle.com/#!2/3989b1/3/0

SELECT * 
FROM logs, 
    (SELECT (CURRENT_DATE() - INTERVAL (WEEKDAY(CURRENT_DATE()) + 1) % 7 DAY) AS sun_day) t1 
WHERE 
    logs.date_added2 BETWEEN t1.sun_day - INTERVAL 6 DAY 
     AND t1.sun_day - INTERVAL 2 DAY; 

它是如何工作

folling周

SELECT '2014-01-09' - INTERVAL (WEEKDAY('2014-01-09') + 1) % 7 DAY; 
+--------------------------------------------------------------+ 
| '2014-01-09' - INTERVAL (WEEKDAY('2014-01-09') + 1) % 7 DAY | 
+--------------------------------------------------------------+ 
| 2014-01-05             | 
+--------------------------------------------------------------+ 

SELECT '2014-01-10' - INTERVAL (WEEKDAY('2014-01-10') + 1) % 7 DAY; 
+--------------------------------------------------------------+ 
| '2014-01-10' - INTERVAL (WEEKDAY('2014-01-10') + 1) % 7 DAY | 
+--------------------------------------------------------------+ 
| 2014-01-05             | 
+--------------------------------------------------------------+ 

這樣的查詢返回週日,t1.sun_day - INTERVAL 6保持前一週的星期一,t1.sun_day - INTERVAL 2 DAY爲前一週的週五。

mysql> SELECT @sunday := (CURRENT_DATE() - INTERVAL (WEEKDAY(CURRENT_DATE()) + 1) % 7 DAY) AS sunday; 
+------------+ 
| sunday  | 
+------------+ 
| 2014-01-05 | 
+------------+ 

mysql> SELECT @sunday - INTERVAL 6 DAY, @sunday - INTERVAL 2 DAY; 
+--------------------------+---------------------------+ 
| @sunday - INTERVAL 6 DAY | @sunday - INTERVAL 2 DAY | 
+--------------------------+---------------------------+ 
| 2013-12-30    | 2014-01-03    | 
+--------------------------+---------------------------+ 

因此,logs.date_added2 BETWEEN t1.sun_day - INTERVAL 6 DAY AND t1.sun_day - INTERVAL 2 DAY會從星期一到星期五發現日誌。