You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite中如何实现日期的小于等于操作?TEXT类型日期相同却查询无结果问题

解决SQLite中TEXT类型日期时间<=查询无结果的问题

嘿,我太懂你这个头疼的问题了!之前我也踩过SQLite处理带微秒日期的坑,这就给你拆解清楚:

问题根源

你用的datetime('2021-09-19 07:21:31.371766')函数有个小毛病——它会自动截断掉微秒部分!执行这个函数后返回的结果其实是'2021-09-19 07:21:31',而你表中存储的是完整带微秒的字符串'2021-09-19 07:21:31.371766'。

因为你的BillDateTime是TEXT类型,SQLite会按字符串规则比较:'2021-09-19 07:21:31.371766'明显比'2021-09-19 07:21:31'字典序更大,所以你的<=条件自然匹配不到这条记录。

两种快速解决办法

方法1:直接比较字符串(最推荐)

你的BillDateTime存储的是标准ISO8601格式(YYYY-MM-DD HH:MM:SS.ffffff),这种格式的字符串顺序和时间顺序完全一致!所以根本不需要用datetime()函数转换,直接写条件就行:

SELECT * FROM BillingTransaction 
WHERE BillDateTime <= '2021-09-19 07:21:31.371766';

这样就能精准匹配到那条带微秒的记录了。

方法2:用strftime()保留微秒比较

如果你一定要用函数处理日期(比如需要做格式转换),可以用strftime(),它支持%f格式符来保留微秒:

SELECT * FROM BillingTransaction 
WHERE strftime('%Y-%m-%d %H:%M:%f', BillDateTime) <= '2021-09-19 07:21:31.371766';

这个函数会完整保留字段中的微秒部分,确保比较的准确性。

额外验证小技巧

你可以单独跑一下这个查询,看看datetime()函数的返回结果:

SELECT datetime('2021-09-19 07:21:31.371766');

结果会是2021-09-19 07:21:31,一目了然就能看到微秒被截断了,这就是问题的关键!

内容的提问来源于stack exchange,提问作者kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 13:12:50