sql between取时间范围

我的表某个字段是Datetime型 以" YYYY-MM-DD 00:00:00" 存放

A 2009-01-22 21:22:22
B 2009-01-22 19:21:11
C 2009-01-22 23:10:22

时间范围查找

现在想从table1查找’2021-01-12’ 到 ‘2021-01-25’ 的数据,要求包含12日全天和26日全天的数据,

现在用

select id, gmt_create from table1 where gmt_create between '2021-01-12' and '2021-01-25';

查出来的数据包含12日全天到25日全天的数据,但没有25的任何数据。
是因为:
SQL中 between and是包括边界值的,not between不包括边界值,不过如果使用between and 限定日期需要注意,between里面的范围日期格式为 ‘2021-01-12’ ,sql 默认会在后面加上’00:00:00’ , 最后的格式为 ‘2021-01-12 00:00:00’, 所以between ‘2021-01-12’ and ‘2021-01-26’, 转化为 ‘2021-01-12 00:00:00’ and ‘2021-01-25 00:00:00’ ,即gmt_create > ‘2021-01-12 00:00:00’ and gmt_create < ‘2021-01-25 00:00:00’ ,是不包含25日全天的时间的
所有如果想从table1查找’2021-01-12’ 到 ‘2021-01-26’ 的数据,要求包含12日全天和25日全天的数据,就要写成between ‘2021-01-12’ and ‘2021-01-26’, 这是从’2021-01-12 00:00:00’ 查到’2021-01-26 00:00:00’,就包含了25日全天的数据。

以下sql等价

select id, gmt_create from table1 where gmt_create > '2021-01-12' and gmt_create < '2021-01-26';

select id, gmt_create from table1 where gmt_create > '2021-01-12 00:00:00' and gmt_create < '2021-01-26 00:00:00';
#上面的两中写法不会包含'2021-01-22 00:00:00'这一刻的数据,如果想包含可以这么写:
select id, gmt_create from table1 where gmt_create > '2021-01-12 00:00:00' and gmt_create < '2021-01-26 00:00:00' or gmt_create = '2021-01-12 00:00:00';

##---------------------------------------------------------------------------##
select id, gmt_create from table1 where gmt_create between '2021-01-12' and '2021-01-26';

select id, gmt_create from table1 where gmt_create between '2021-01-12 00:00:00' and '2021-01-26 00:00:00';
#上面的between写法会包含'2021-01-26 00:00:00'这一刻的数据,

查某一天的数据

如果写成

select id, gmt_create from table1 where gmt_create between '2021-01-12' and '2021-01-12';

只能查出2021-01-12 00:00:00 这一刻的数据

需要写成

select id, gmt_create from table1 where gmt_create between '2021-01-12 00:00:00' and '2021-01-12 23:59:59';

或者写成这样更精确

select id, gmt_create from crowd_analysis_cache where gmt_create > '2021-01-12 00:00:00' and gmt_create < '2021-01-13 00:00:00' or gmt_create = '2021-01-12 00:00:00';
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值