添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
胆小的签字笔  ·  GitHub - ...·  1 月前    · 
不开心的拖把  ·  5·18 ...·  3 月前    · 

按时间范围查询,你一定纠结过开始时间和结束时间要不要格式化为 00:00:00 23: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;
                                        在创建表和查询表中的数据时, 经常会跟时间打交道, 比如查询某一段时间内的订单信息.
    如果要查询订单时间在5月1号到5月12号之间的数据
    Select * From order Where DATE_FORMAT(createTime,'%m-%d') >= '05-01' 
    and DATE_FORMAT(createTime,'%m-%d') <= '05-12';
    DATE_...
                                        大家好,在MySQL数据库开发中,获取时间是一个常见的需求。MySQL提供了多种方法来获取当前日期、时间时间戳,并且可以对时间进行格式化、计算和转换。
    1、获取当前时间                                                                    select now()-- 获取当前具体的日期和时间 2022-05-07 16:07:39
    select curdate()-- 获取当前日期 2022-05-07
    select cu...
                                        可以像普通查询使用等号进行查询,但必须查询时间必须和字段对应时间完全相等,比如我要查下面这个值。查询时间不难,只要知道是要按年、按月还是按日,格式化时间的字符写对就行。时间一般都不会使用 “=” 查询。
                                        有的时候我们想查询数据的创建时间,也可以理解为用户的注册时间查询数据,因为一般创建时间都会timestamp类型,所以根据年月日的日期是无法查询到的,所以我们需要转换格式查询,下面就看具体的操作吧。这是我表的数据。这是我的查询语句。完全查询不到的。下面我们就要根据时间戳来转换格式查询。可以看到使用格式转换之后就能匹配到查询数据格式了。版权声明:觉得此文有用的,请您点个赞,如果有自己想法,可以在...
    SELECT * FROM customer lastlogintime  >= '2015-01-01 13:50:42'  AND lastlogintime  <= '2015-02-06 00:00:00'  ORDER BY ID DESC
    但是传统的方法效率很...
                                        select * from order where timestamp between  UNIX_TIMESTAMP('2011-06-01 00:00:00') and UNIX_TIMESTAMP('2011-07-01 00:00:00');
                                        原因:这里查询小于等于就是:2023-05-05 00:00:00,因此就会不生效,所以应该传  2023-05-05 23:59:59,或者代码再新增一天。如果数据库中的格式是:datetime,带时分秒:条件查询是: yyyy-mmm-dd,方式一:时间范围方式:between  .....  and ......方式二 :时间范围方式: >=  大于等于,  <=  小于等于。为什么小于等于不生效?