mysql中between--and的范围问题

在手写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

祝大家新年快乐
猪年大吉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值