betweenand(betweenAnd遵循什么原则)满满干货
问题描述都知道between and查询是包含上下边界的, 但是在遇到形如select 字段1, 字段2 from table_xxx wher
问题描述都知道between and查询是包含上下边界的, 但是在遇到形如select 字段1, 字段2from 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
valuesinYYYY-MM-DD HH:MM:SS.ffffffformat, but allows assignment ofvaluesto DATETIME columnsusing either strings
or numbers. MariaDB stores values that use the DATETIME datatypein a format that supports valuesbetween
1000-01-0100:00:00.000000and9999-12-3123: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
就完美了!
- 标签:
- 编辑:李松一
- 相关文章
-
内存缓冲区(内存缓冲区有多大)硬核推荐
APU介绍今年2月12日,AMD的Raven Ridge系列桌面APU处理器正式解禁,首批上市的两款产品分别为Ryzen 5 2400G和Ryzen 3 2200G从C…
-
内存缓冲区(内存缓冲区有多大)这都可以
为了确保引用计数不会混乱,在Netty的业务处理器开发过程中,应该坚持一个原则:retain和release方法应该结对使用。简单地说,在一个方…
- 怪物猎人2g太刀(怪物猎人2g太刀校服)一篇读懂
- 邮局订杂志(邮局订杂志发货都不通知怎么办)没想到
- 韩徐为(韩徐为考证)真没想到
- 国外中文网(国外中文网站app)这样也行?
- coms设置(coms设置完重新起不了)墙裂推荐