mysql查询某日数据时,我有些不理解。
使用开区间查询(00:00:00,23:59:59),就查不到。
使用半开区间查询【00:00:00,23:59:59),就能查到
select order_time form orders where status = 5 and order_time>='2023-07-12 00:00:00' and ordertime<'2023-07-12 23:59:59';
查下订单创建时间,不出意外的话,应该是订单创建时间都为2023-07-12 00:00:00。
使用between ... and ...没有问题。
请对比一下数据 ,先别做统计,类似于执行select * from order where... 或者select order_time from order看一下数据~
希望能帮助到你,麻烦点一下采纳,谢谢。
当你在MySQL中进行时间范围查询时,使用开区间查询(不包括边界)或半开区间查询(包括一个边界)可能会导致查询结果不同的原因是因为MySQL中的日期时间类型默认具有秒级精度。
如果你使用开区间查询(00:00:00, 23:59:59),它实际上是指查询从 00:00:00 到 23:59:59 的时间段,但如果你的数据中的时间戳包含毫秒或微秒部分,它可能无法与查询条件精确匹配。因此,可能会导致查询结果不完整。
而使用半开区间查询(00:00:00, 23:59:59]),包括了 23:59:59 这一刻,因此即使数据中包含毫秒或微秒部分,也会被正确匹配到。
为了确保查询结果准确,可以使用半开区间查询(00:00:00, 23:59:59])或者使用更加精确的日期时间函数来进行查询,例如使用 DATE()
函数将时间部分忽略,只关注日期。
以下是使用 DATE()
函数进行日期查询的示例:
SELECT * FROM your_table
WHERE DATE(your_datetime_column) = '2023-07-11';
这样可以忽略时间部分,只查询某一特定日期的数据。
希望这能帮助你理解在MySQL中进行时间范围查询时的区间选择以及解决方案。如果还有其他疑问,请随时提问。
执行
SELECT @@SESSION.sql_mode; //查看MySQL的当前连接的模式,如果当前连接模式与全局模式不一致,关闭连接后再连接就一致了
查询结果中有NO_ZERO_DATE和NO_ZERO_IN_DATE,就是我们日期不能设为0000-00-00的原因了
只要通过修改mysql的模式就可以了,参照上面的设置方法,根据自己情况选择session还是global,把这两个变量去掉就可以了。