sql查询日期时间范围(sql查询日期时间范围的方法)

来源:国外服务器 在您之前已被浏览:1 次
导读:目前正在解读《sql查询日期时间范围(sql查询日期时间范围的方法)》的相关信息,《sql查询日期时间范围(sql查询日期时间范围的方法)》是由用户自行发布的知识型内容!下面请观看由(国外主机 - www.2bp.net)用户发布《sql查询日期时间范围(sql查询日期时间范围的方法)》的详细说明。
国外云主机,www.2 bp .net

问题描述

都知道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数据类型:

DATETIMEA 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’

就完美了!

国外云主机,www.2 bp .net
提醒:《sql查询日期时间范围(sql查询日期时间范围的方法)》最后刷新时间 2023-03-27 02:23:01,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《sql查询日期时间范围(sql查询日期时间范围的方法)》该内容的真实性请自行鉴别。