SELECT база данных ежемесячной записи

mysql> SELECT * FROM con_transactions; +------+------+---------------------+--------+ | t_id | p_id | date | amount | +------+------+---------------------+--------+ | 10 | 1 | 2016-02-17 19:24:05 | 1800 | | 12 | 2 | 2016-02-18 11:40:13 | 200 | | 17 | 3 | 2016-02-18 11:42:04 | 100 | | 19 | 4 | 2016-02-18 11:45:43 | 1 | | 20 | 5 | 2016-02-18 11:45:54 | 999 | | 21 | 1 | 2016-02-18 11:46:02 | 1500 | | 41 | 2 | 2016-02-18 17:23:14 | 500 | | 42 | 3 | 2016-02-18 17:23:14 | 500 | | 43 | 4 | 2016-02-18 17:23:15 | 500 | | 44 | 5 | 2016-02-18 17:23:16 | 500 | | 45 | 1 | 2016-02-18 17:23:16 | 500 | | 46 | 2 | 2016-02-18 17:23:16 | 500 | | 47 | 3 | 2016-02-18 17:23:17 | 500 | | 48 | 4 | 2016-02-18 17:23:17 | 500 | | 49 | 5 | 2016-02-18 17:23:18 | 500 | | 50 | 1 | 2016-02-18 17:25:54 | 1000 | | 51 | 1 | 2016-02-18 17:26:22 | 3000 | | 52 | 2 | 2016-02-18 17:48:59 | 10 | | 53 | 1 | 2016-02-18 17:48:59 | 10 | | 55 | 1 | 2016-02-19 10:20:12 | 1000 | +------+------+---------------------+--------+ 

Как я могу выбрать текущий месяц или последний месяц Все записи транзакций. Весь месяц не 30 дней. Так как я могу выбрать январь или другую запись месяца с запросом SELECT. Я попробую этот запрос

 SELECT * FROM con_transactions WHERE date > '2016-01-01 00:00:00' AND date < '2016-02-01 00:00:00'; 

Это не так умно.

Используйте month() и year() чтобы напрямую найти любой месяц месяца.

 SELECT * FROM con_transactions WHERE year(date) = 2016 AND month(date) = 1; 

Один из способов – использовать такие форматы, как YYYYMM для сравнения даты:

 SELECT * FROM con_transactions WHERE YEAR(date) * 100 + MONTH(date) = YEAR(CURDATE())*100 + MONTH(CURDATE()); 

Однако это имеет недостаток, что MySQL не может использовать индекс для WHERE . Таким образом, другой метод – это вариант вашего метода, но с использованием первого дня месяца:

 WHERE date >= str_to_date(concat_ws('-', year(curdate()), month(curdate()), '01'), '%Y-%m-%d) and date < str_to_date(concat_ws('-', year(dateadd(curdate(), interval 1 month)), month(dateadd(curdate(), interval 1 month), '01'), '%Y-%m-%d)