1

我想BETWEEN在我的 PHP - MySQL 中使用。

示例我有表:

badge_id | balance_type | balance_amount | balance_month
110702   | aa           | 250000         | January-2013
110702   | ab           | 100000         | January-2013
110702   | aa           | 100000         | February-2013
110702   | ab           | 90000          | February-2013
110702   | aa           | 100000         | March-2013
110702   | ab           | 110000         | March-2013

现在我只想SUM从 2013 年 1 月到 2013 年 2 月的余额月。

SELECT balance_type AS balance_type, SUM(balance_amount) AS value_sum
FROM t_balance 
WHERE badge_id = '110702' && balance_month BETWEEN 'August-2013' 
  and 'September-2013'
GROUP BY balance_type

但它将对所有 balance_month 求和。

有什么建议吗?

4

3 回答 3

1

这是因为您有一个用于 balance_month 的字符串列。BETWEEN August-2013 and September-2013基本上BETWEEN A AND S是字母表(不知道如何更好地描述它,这里缺乏英语技能)。J 代表 1 月,F 代表 2 月介于 A 和 S 之间,因此 MySQL 会将其计算在内。将列转换为日期

WHERE ... AND STR_TO_DATE(balance_month, '%M-%Y') BETWEEN '2013-08-01' 
  and '2013-09-30'

但是,如果我是你,我会摆脱该列并使用真正的日期列。否则无法在其上使用索引,因为您总是必须在其上使用 str_to_date() 之类的函数。

于 2013-08-21T08:54:17.510 回答
1

这将工作...

选择 balance_type AS balance_type, SUM(balance_amount) AS value_sum
从 t_balance
WHERE badge_id = '110702' && STR_TO_DATE(balance_month,'%M-%Y') BETWEEN '2013-08-01'
  和“2013-09-30”
按余额类型分组
于 2013-08-21T09:06:21.443 回答
0

由于命运的不幸转折,所有月份August-2013and之间September-2013- 因为您可能正在比较字符串而不是date

在 MySQL 上,正确的日期具有DATE(或一种可派生的)类型,并且应格式化为YYYY-MM-DD.

于 2013-08-21T08:56:04.030 回答