原因分析:

时间精度截断:

MySQL的 DATETIME 类型最高支持微秒精度(6位小数),而您提供的时间戳有9位小数(纳秒级)。

当值被插入或查询时,超出的精度会被四舍五入(MySQL 5.6.4+)或直接截断(旧版本)。

四舍五入导致日期进位

-- 您的原始时间:

2024-09-30 23:59:59.999999999

--MySQL实际处理(假设四舍五入):

2024-09-30 23:59:59.999999999 → 2024-10-01 00:00:00.000000

解决方案:

显式指定精度:

sql

SELECT CAST('2024-09-30 23:59:59.999999' AS DATETIME(6)); -- 保留微秒级

使用字符串比较(避免自动转换):

sql

WHERE created_time < '2024-09-30 23:59:59.999999'

调整查询逻辑:

sql

-- 查询10月1日之前的所有数据(包含边界)

WHERE created_time < '2024-10-01 00:00:00'