按时间范围查询,你一定纠结过开始时间和结束时间要不要格式化为
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 ......方式二 :时间范围方式: >= 大于等于, <= 小于等于。为什么小于等于不生效?