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
相关产品推荐
相关产品推荐

