我正在尝试创建一个按月和月分项的select语句。
这是我到目前为止所做的:
SELECT * FROM sales WHERE YEAR(Date) = 2013 AND MONTH(?) = 'June'
我不能只选择日期范围,因为不同的月份有不同的天数。按照数字(即1月为1)或类似方法选择月份是理想的。
如何在mysql语句中解决这个问题?
这些字段是日期时间字段,例如2012-12-01 00:00:00
答案 0 :(得分:2)
查看效果并将您的条件写为
SELECT * FROM sales
WHERE
Date >= '2013-06-01 00:00:00'
AND
Date < '2013-07-01 00:00:00'
示例月份:2013年6月
所以MySQL可以在列日期使用索引。您将获得2013年6月的所有行,即使是第一秒的行,也不会是2013年7月的第一行。
你知道,你不需要知道特定月份的天数,因为你将使用这两个月的第一天。
您也可以使用一些日期计算:
SELECT * FROM sales
WHERE
Date >= '2013-06-01 00:00:00'
AND
Date < '2013-06-01 00:00:00' + INTERVAL 1 MONTH
所以你只需要知道间隔的开始和长度。
注意强>
我的答案中最重要的部分是使用列Date
而不使用此列上的函数,因此MySQL可以使用索引。