MySQL按时间查询,date、datetime和timestamp类型查询参数和返回的数据范围是不同的

按时间范围查询,你一定纠结过开始时间和结束时间要不要格式化为00:00:0023:59:59,也一定纠结过数据库的时间是按照什么类型比较的,between and可以用吗?反正我是纠结过。

数据库时间比较是按照什么类型去比较?
你一定见过按时间查询的SQL,时间参数用''修饰,那我们可以理解为数据库时间表面上是按字符串类型(字典顺序)去比较的,实战中我们也是这样用的,但实际上数据库时间是按照时间戳比较的(数据库源码中应该可以找到,反正我没看过源码)。我们不需要知道它按什么类型比较,只需要知道SQL用字符串就可以实现时间范围查询。

between and可以用于时间范围查询吗?
当然可以,但是对于不同类型的时间,应该使用相应的数据去查询,否则查询可能不是预期的结果集。

对于date,参数应该是 年月日 格式,例如between '2019-07-18' and '2019-07-18'
对于datetime/timestamp,参数应该是 年月日时分秒 格式,例如between '2019-07-18 00:00:00' and '2019-07-18 23:59:59'

年月日格式为例(between '2019-07-18' and '2019-07-18'),MySQL查询的数据的范围如下:

类型数据的开始时间数据的结束时间
date以 2019-07-18 00:00:00 开始以 2019-07-18 23:59:59 结束
datetime以 2019-07-18 00:00:00 开始以 2019-07-18 00:00:00 结束
timestamp以 2019-07-18 00:00:00 开始以 2019-07-18 00:00:00 结束

示例

数据如下,均按照年月日的参数格式查询数据
在这里插入图片描述

  • date查询

    select * from time_test where date_type between '2019-07-16' and '2019-07-18' ORDER BY date_type;
    select * from time_test where date_type >= '2019-07-16' and date_type <= '2019-07-18' ORDER BY date_type;
    

    在这里插入图片描述

  • datetime/timestamp 查询

    select * from time_test where datetime_type between '2019-07-16' and '2019-07-18' ORDER BY date_type;
    select * from time_test where datetime_type >= '2019-07-16' and datetime_type <= '2019-07-18' ORDER BY date_type;
    
    select * from time_test where timestamp_type between '2019-07-16' and '2019-07-18' ORDER BY date_type;
    select * from time_test where timestamp_type >= '2019-07-16' and timestamp_type <= '2019-07-18' ORDER BY date_type;
    

    在这里插入图片描述

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值