我有以下查询?
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
非常感谢。
答案 0 :(得分:2)
尝试
WHERE creation_date BETWEEN '2011-08-01' AND '2011-08-30'
您正在使用MySQL无法识别为日期的日期格式,因此它将它们视为字符串。
答案 1 :(得分:0)
因为您要比较字符串而不是日期。字符串08/12/2010
确实位于08/01/2011
和08/30/2011
使用
WHERE creation_date BETWEEN '2011-08-01' AND '2011-08-30'
代替。如有必要,请使用STR_TO_DATE()
函数在右侧格式化值。
答案 2 :(得分:0)
这是你想要做的:
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
答案 3 :(得分:0)
您正在对字符串进行范围比较。