2017-01-20 8 views
0
WHERE 
    order_customFields.order_customFields_order_date >= '2016-12-01' AND 
    order_customFields.order_customFields_order_date <= '2016-12-31' 

今日のデータではなく、前日のデータを選択する方法 - 30日?たとえば、1月の任意の日には、常に1decから31decになります。 date_sub(curdate(), interval day(curdate()) - 1 day)現在の月の最初の日を返します。式があること前月を選択

WHERE order_customFields.order_customFields_order_date >= date_sub(date_sub(curdate(), interval day(curdate()) - 1 day), interval 1 month) and 
     order_customFields.order_customFields_order_date < date_sub(curdate(), interval day(curdate()) - 1 day) 

注:ここでは

+0

は、現在の日が何を意味するのではありませんか? – denny

答えて

1

は一つの方法です。

1

例えば:

SELECT * FROM my_table; 
+------------+ 
| dt   | 
+------------+ 
| 2016-11-01 | 
| 2016-11-04 | 
| 2016-11-06 | 
| 2016-11-07 | 
| 2016-11-09 | 
| 2016-11-10 | 
| 2016-11-12 | 
| 2016-11-13 | 
| 2016-11-14 | 
| 2016-11-15 | 
| 2016-11-16 | 
| 2016-11-17 | 
| 2016-11-18 | 
| 2016-11-19 | 
| 2016-11-20 | 
| 2016-11-21 | 
| 2016-11-22 | 
| 2016-11-23 | 
| 2016-11-24 | 
| 2016-11-25 | 
| 2016-11-26 | 
| 2016-11-28 | 
| 2016-12-01 | 
| 2016-12-03 | 
| 2016-12-04 | 
| 2016-12-07 | 
| 2016-12-11 | 
| 2016-12-13 | 
| 2016-12-15 | 
| 2016-12-18 | 
| 2016-12-19 | 
| 2016-12-22 | 
| 2016-12-25 | 
| 2016-12-28 | 
| 2017-01-01 | 
| 2017-01-04 | 
| 2017-01-07 | 
| 2017-01-11 | 
| 2017-01-14 | 
| 2017-01-15 | 
| 2017-01-16 | 
| 2017-01-19 | 
+------------+ 

SELECT * 
    FROM my_table 
WHERE dt BETWEEN DATE_FORMAT(CURDATE()-INTERVAL 1 MONTH,'%Y-%m-01') 
       AND LAST_DAY(CURDATE()-INTERVAL 1 MONTH); 
+------------+ 
| dt   | 
+------------+ 
| 2016-12-01 | 
| 2016-12-03 | 
| 2016-12-04 | 
| 2016-12-07 | 
| 2016-12-11 | 
| 2016-12-13 | 
| 2016-12-15 | 
| 2016-12-18 | 
| 2016-12-19 | 
| 2016-12-22 | 
| 2016-12-25 | 
| 2016-12-28 | 
+------------+ 
関連する問題