MySQL запрос на диапазон дат.Что случилось? - PullRequest
0 голосов
/ 08 сентября 2011

У меня есть следующий запрос?

SELECT id_service, creation_date, SUM(ammount)
FROM transactions
WHERE DATE_FORMAT(creation_date, '%m/%d/%Y') BETWEEN '08/01/2011'  AND '08/30/2011'
AND id_service = 1
GROUP BY DAY(creation_date)
ORDER BY creation_date

Я принимаю транзакции между этими днями в диапазоне от конкретной услуги - в данном случае, службы 1 - с общей суммой денег за эти вхождения.

Тем не менее, в результатах я получаю даты с 2010 года! Это вне диапазона.

id_service creation_date           ammount
1         2010-08-12 16:57:16   650    <---- WHY 2010???
1         2011-08-01 12:10:01   1735
1         2011-08-02 15:17:12   360
1         2011-08-04 22:05:27   555

Большое спасибо.

Ответы [ 4 ]

2 голосов
/ 08 сентября 2011

Попробуйте

WHERE creation_date BETWEEN '2011-08-01' AND '2011-08-30'

Вы используете форматы дат, которые MySQL не распознает как даты, поэтому он обрабатывает их как строки.

0 голосов
/ 08 сентября 2011

Вы выполняете сравнение диапазонов для строк.

0 голосов
/ 08 сентября 2011

Вот что вы хотите сделать:

SELECT id_service, creation_date, SUM(ammount)
FROM transactions
WHERE DATE_FORMAT(creation_date, '%Y/%m/%d') BETWEEN '2011/08/01'  AND '2011/08/30'
AND id_service = 1
GROUP BY DAY(creation_date)
ORDER BY creation_date

Вы конвертируете creation_date в строку, начинающуюся с месяца, поэтому да, дата 2010 года составляет между указанными вами значениями!

Если creation_date на самом деле дата, вы можете упростить это до:

SELECT id_service, creation_date, SUM(ammount)
FROM transactions
WHERE creation_date BETWEEN '2011-08-01'  AND '2011-08-30'
AND id_service = 1
GROUP BY DAY(creation_date)
ORDER BY creation_date
0 голосов
/ 08 сентября 2011

Потому что вы сравниваете строки, а не даты. Строка 08/12/2010 действительно находится между 08/01/2011 и 08/30/2011

1005 * * Используйте
WHERE creation_date BETWEEN '2011-08-01'  AND '2011-08-30'

вместо этого. Используйте функцию STR_TO_DATE() для форматирования значений справа при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...