-
SQL之between and查询日期时的边界问题
- 网站名称:SQL之between and查询日期时的边界问题
- 网站分类:技术文章
- 收录时间:2025-06-08 15:51
- 网站地址:
“SQL之between and查询日期时的边界问题” 网站介绍
问题描述
都知道between and查询是包含上下边界的, 但是在遇到
形如
select 字段1, 字段2 from table_xxx where 时间字段 between 开始时间 and 结束时间
的日期查询时, 查询结果可能会出乎意料.
(注意: 使用的数据库是MariaDB(MySQL), 时间字段 是 DATETIME 类型)
比如: select 字段1, 字段2 from table_xxx where 时间字段 between '2021-05-01' and '2021-05-10' 的查询结果中,
包含2021-05-01的记录, 但并不包含2021-05-10最后一天的记录,
好像between and的边界原则失效了, 这是这么回事呢?
问题解答
实际上, between and的查询边界并没有改变, 还是老样子, 只是我们在日期查询时, 一开始把问题想简单了, 实际上还是对于字段类型把握的准确性.
由于时间字段是DATETIME类型, 我们来仔细看看DATETIME数据类型:
DATETIME
A date and time combination.
MariaDB displays DATETIME values in 'YYYY-MM-DD HH:MM:SS.ffffff' format,
but allows assignment of values to DATETIME columns using either strings or numbers.
MariaDB stores values that use the DATETIME data type in a format that supports values
between 1000-01-01 00:00:00.000000 and 9999-12-31 23:59:59.999999.
以上对DATETIME的描述摘自:
https://mariadb.com/kb/en/datetime/ 页面
由此可知, 语句between '2021-05-01' and '2021-05-10'
会被MariaDB数据库转换为
between '2021-05-01 00:00:00.000000' and '2021-05-10 00:00:00.000000'.
这样当然不会包含05-10这一天的记录.
所以, 问题还是出在 查询条件 写得不够严谨, 不要偷懒, 写成下面语句
between '2021-05-01 00:00:00' and '2021-05-10 23:59:59'
就能达到我们想要得目标结果了, 如果数据很多, 时间颗粒度要求高, 也可写成
between '2021-05-01 00:00:00.000000' and '2021-05-10 23:59:59.999999'
就完美了!
更多相关网站
- 云服务器:SQL数据库超时的原因与解决方法
- 一个时间戳精度问题,引发了一个MySQL血案
- (二十二) 程序员必备: 10秒到0.1秒,亿级数据下MySQL慢查询分析教程
- MySQL各种SQL的执行频率
- PGSQL提取本月跨越的周数及每周的开始结束日期
- '0000-00-00'日期可以存入MySQL吗
- 【SQL】SQL 语法差异大全(PgSQL/MySQL/Oracle/TiDB/OceanBase)
- 了解SQL吗
- SQL用了两年多,分享2个最常用的小技巧
- 从Sql角度,对比学习Python数据处理包pandas
- SqlServer根据身份证号码查询出生日期和年龄
- 吊打面试官(十一)--Java语言中日期处理相关问题总结
- 玩转MySQL的时间类型:Date、DateTime、TimeStamp、Time
- 多表关联查询的性能优化技巧:预关联
- SQL学习:SQL同比分析案例讲解,一看就懂
- java.util.Date、java.sql.Date、java.sql.Timestamp区别和总结
- 疯传!Java 日期时间底层逻辑大揭秘,看完直接拿捏面试官挖的坑!
- 记一次有意思的 SQL 实现 → 分组后取每组的第一条记录
- 最近发表
-
- JavaScript,ES6,数值扩展,二进制、八进制和十六进制,方法
- 如何用2 KB代码实现3D赛车游戏?2kPlus Jam大赛了解一下
- 10个JavaScript一行代码,解决90%的开发难题
- 如何使用 Fraction.js 解决 BigInt 的计算盲区?
- js四舍五入(js中四舍五入的代码怎么打)
- 全能硬件大师AIDA64 v4.60 最新绿色版下载
- 实用神帖 隔壁老王买到iPhone 6魔改6s,怎么破?
- DIY装机小白的618配机历程(3千元的146K,DDR5无卡方案)2025
- AIDA64 7.30版本发布:改善深色/高对比度模式
- DIY从入门到放弃:CPU没有SN码是保护你
- 标签列表
-
- mydisktest_v298 (35)
- sql 日期比较 (33)
- document.appendchild (35)
- 头像打包下载 (35)
- 二调符号库 (23)
- acmecadconverter_8.52绿色版 (25)
- 梦幻诛仙表情包 (36)
- 魔兽模型 (23)
- java面试宝典2019pdf (26)
- disk++ (30)
- 加密与解密第四版pdf (29)
- iteye (26)
- parsevideo (22)
- centos7.4下载 (32)
- cuda10.1下载 (22)
- intouch2014r2sp1永久授权 (33)
- usb2.0-serial驱动下载 (24)
- jdk1.8.0_191下载 (27)
- axure9注册码 (30)
- virtualdrivemaster (26)
- 数据结构c语言版严蔚敏pdf (25)
- 兔兔工程量计算软件下载 (27)
- 代码整洁之道 pdf (26)
- ccproxy破解版 (31)
- aida64模板 (28)