我目前有一个代码可以根据某些信息选择某些sql查询。目前正如此:
$sql = "SELECT * FROM transaction WHERE id_task = '2' AND id_child = '$number' AND MONTH(datetime) = MONTH('2016-02-13 20:36:41')";
问题在于,虽然它确实选择了正确的月份,但我还想指定年份,但是,我不知道如何做到这一点。任何帮助将不胜感激
答案 0 :(得分:1)
一个天真的解决方案是这样的:
MONTH(datetime) = MONTH('2016-02-13 20:36:41')
and YEAR(datetime) = YEAR('2016-02-13 20:36:41')
但是可以使用索引的更好,更高效的方法是:
WHERE
datetime>=subdate(date('2016-02-13 20:36:41'), (day('2016-02-13 20:36:41')-1))
and datetime<last_day('2016-02-13 20:36:41')+interval 1 day
这将计算给定月份的第一天:
subdate(date('2016-02-13 20:36:41'), (day('2016-02-13 20:36:41')-1))
这将计算下个月的第一天:
last_day('2016-02-13 20:36:41')+interval 1 day
因此您只需使用>=first_day_of_given_month
和<first_day_of_next_month