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'
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的BETWEEN AND关键字用于查询指定范围内的数据。具体语法形式如下: SELECT field1, field2, ..., fieldn FROM tablename WHERE fieldm BETWEEN minvalue AND maxvalue。\[2\] 例如,如果我们需要查询成绩表中语文成绩在80和90之间的学生记录,可以使用以下SQL语句: SELECT * FROM grade WHERE chinese BETWEEN 80 AND 90;\[1\] 另外,需要注意的是,当使用日期进行范围查询时,需要考虑时间的精确性。例如,如果我们需要查询创建时间在2022-01-06到2022-01-09之间的用户记录,可以使用以下SQL语句: SELECT * FROM user WHERE create_time BETWEEN '2022-01-06' AND '2022-01-09 23:59:59';\[3\] 需要注意的是,使用日期作为范围查询时,如果不指定具体的时间,查询结果可能会少一条数据,因为默认时间为0:0:0。 #### 引用[.reference_title] - *1* *2* [MySQL - 数据查询_简单查询_between_and查询详解](https://blog.csdn.net/m0_45867846/article/details/107284814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mysql中between..and的用法](https://blog.csdn.net/huandian/article/details/123111824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值