MySQL BETWEEN AND踩坑记录

 更新时间:2023年07月28日 11:02:18   作者:Bryce180  
这篇文章主要介绍了MySQL BETWEEN AND踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MySQL BETWEEN AND踩坑

在日常使用MySQL的过程中,我们很习惯性的会使用“BETWEEN … AND…”来进行条件查询,筛选对应时间、状态的数据。

但,如果这个日期字段是日期/时间格式,那么坑就来了。

SELECT 
	* # 正式学习工作尽量不要直接使用 *,这里是自建的模拟表无所谓
FROM 
	test 
WHERE 
	time BETWEEN '2023-04-01' AND '2023-04-20'
ORDER BY 
	time desc

输出结果:

在这里插入图片描述

但是!

实际上我们的表中是有2023-04-20这一天的数据的

SELECT 
	*
FROM 
	test 
WHERE 
	DATE(time) = '2023-04-20'

在这里插入图片描述

MySQL的BETWEEN ... AND...的取值确实是闭区间,但是如果日期字段包含时间,即2023-04-20 09:23:35

MySQL会将BETWEEN '2023-04-01' AND '2023-04-20'自动转换为BETWEEN '2023-04-01 00:00:00' AND '2023-04-20 00:00:00'

也就是说,当日期字段带时间时,最后一天仅会获取00:00:00这一时间点的数据,而非我们想象中的最后一天一整天的数据!

解决思路

1.使用DATE()

DATE(time) BETWEEN '2023-04-01' AND '2023-04-20'

2.使用小于号,小于最后一天的后一天

time >= '2023-04-01' and time < '2023-04-21'

3.手动补上时间(不建议,麻烦且可能出现更多坑)

time BETWEEN '2023-04-01 00:00:00.000000' AND '2023-04-20 23:59:59.999999'

MySQL之between ...and....小知识点

使用BETWEEN AND关键字检索数据表中指定的数据内容。

带BETWEEN AND关键字的查询

我们已经学会了如何用IN关键字精确查询数据表中的内容,但是在很多时候,我们仅仅是想知道在某一范围内有多少符合条件的数据,这就不得不使用到关键字BETWEEN AND了,它是闭区间,前后都可以取到

BETWEEN AND需要两个参数支持,一个是范围的开始值,另一个就是结束值了。

如果字段值满足指定的范围查询条件,就返回这些满足条件的数据内容。

语法规则为:

SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN n1 AND n2; ​​​​​​​

举个例子假设我们现在有一张表Mall_products,

内容如下:

我们将使用BETWEEN AND关键字检索出所有国家代码为1~50的商品的信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country BETWEEN 1 AND 50;

结果为:

查询过程如下:

可以看到,返回结果包含了国家代码从1~50之间的字段值。尤其值得注意的是,端点值1也包含在返回结果中

带NOT BETWEEN AND关键字的查询

像上一关介绍的关键字IN一样,我们还可以对关键字BETWEEN AND进行取反,表示查询指定范围之外的值。

语法规则为:

SELECT 字段名 FROM 表名 WHERE 字段名 NOT BETWEEN n1 AND n2; ​​​​​​​

举个例子我们依然使用表Mall_products。

现在我们想要查询除了国家代码为1~50的所有国家的产品内容。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country NOT BETWEEN 1 AND 50;

结果为:

由结果可以看出,返回的结果只有大于国家代码50的内容。

怎么样?简单吧!

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MYSQL中EXISTS的用法小结

    MYSQL中EXISTS的用法小结

    在MySQL数据库中,EXISTS是一种强大的工具,用于处理复杂的查询需求,本文主要介绍了MYSQL中EXISTS的用法小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • 解读sql中timestamp和datetime之间的转换

    解读sql中timestamp和datetime之间的转换

    这篇文章主要介绍了解读sql中timestamp和datetime之间的转换方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 通过ibd文件恢复MySql数据的操作方法

    通过ibd文件恢复MySql数据的操作方法

    文章介绍通过.ibd文件恢复MySQL数据的过程,包括知道表结构和不知道表结构两种情况,对于知道表结构的情况,可以直接将.ibd文件复制到新的数据库目录并重启MySQL,对于不知道表结构的情况,可以使用ibd2sql工具生成对应的SQL脚本,然后执行该脚本恢复数据,感兴趣的朋友看看吧
    2025-03-03
  • MySQL操作数据库实战指南

    MySQL操作数据库实战指南

    这篇文章主要给大家介绍了关于MySQL数据库操作库的相关资料,MySQL数据库是一个关系型数据库管理系统,所采用的SQL语言是用于访问数据库最常用的标准会语言,需要的朋友可以参考下
    2023-07-07
  • mysql 安全管理详情

    mysql 安全管理详情

    这篇文章主要介绍了mysql 安全管理,MySQL服务器的安全基础是用户应该对他们需要的数据具有适当的访问权,既不能多也不能少,换句话说,用户不能对过多的数据具有过多的访问权,下面俩看看文章详细内容吧
    2021-10-10
  • 详解MySQL8.0 密码过期策略

    详解MySQL8.0 密码过期策略

    这篇文章主要介绍了MySQL8.0 密码过期策略的相关资料,帮助大家更好的理解和使用MySQL8.0的新功能,感兴趣的朋友可以了解下
    2020-11-11
  • 腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列(推荐)

    腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列(推荐)

    这篇文章主要介绍了SQL语句执行慢的原因,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • mysql unix准换时间格式查找指定日期数据代码

    mysql unix准换时间格式查找指定日期数据代码

    这篇文章主要介绍了mysql unix准换时间格式查找指定日期数据,需要的朋友可以参考下
    2014-03-03
  • JDBC数据库驱动的下载、安装与连接过程

    JDBC数据库驱动的下载、安装与连接过程

    这篇文章主要介绍了JDBC数据库驱动的下载、安装与连接过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • MySQL SHOW STATUS语句的使用

    MySQL SHOW STATUS语句的使用

    这篇文章主要介绍了MySQL SHOW STATUS语句的使用,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-12-12

最新评论