在手写sql的时候,有时候对于时间范围,会经常使用between–and,当时有时候会被它坑,只能说没有理解清楚between–and的逻辑及范围判断,以及对于python中datetime构造时间的理解有误。
start_time = datetime(2019, 1, 1)
end_time = datetime(2019, 1, 31)
condition = {
'start_time': start_time,
'end_time': end_time
}
SELECT
*
from your_table
WHERE your_table.your_time BETWEEN %(start_time)s and %(end_time)s
这样你并不会统计到1月31日的数据,因为传到sql中的时间为‘2019-01-31 00:00:00’,所以统计不到。
以下为一些统计测试:
SELECT if(7.1 BETWEEN 6 and 7, 1, 0);
-- 0
SELECT if('2019-01-31 12:12:12' BETWEEN '2019-01-01' and '2019-01-31', 1, 0);
-- 0
SELECT if('2019-01-31' BETWEEN '2019-01-01' and '2019-01-31', 1, 0);
-- 1
SELECT if('2019-01-31 00:00:00' BETWEEN '2019-01-01' and '2019-01-31', 1, 0);
-- 0
SELECT if('2019-01-31 00:00:00' BETWEEN '2019-01-01' and '2019-01-31 00:00:01', 1, 0);
-- 1
祝大家新年快乐
猪年大吉