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

SQLite中WHERE语句针对DateTime字段查询无结果问题求助

问题原因及解决方法

核心问题

SQLite对TEXT类型字段的比较是按字符串字典序执行的,你存储的日期是2023-08-27 09:19:32.7331808这种ISO标准格式,而查询用的是'8/1/2023 12:00:00 AM'美式格式——两者首字符分别是2和8,2的字典序小于8,所以你的查询条件>= '8/1/2023...'会直接排除这条记录,导致返回0结果。

三种解决办法

  • 方法1:统一用ISO格式写查询条件
    把查询语句的日期改成和存储格式一致的ISO格式,字符串比较就能匹配时间顺序:

    SELECT 
    * 
    FROM Tournament 
    WHERE DateTime >= '2023-08-01 00:00:00' AND DateTime <= '2023-08-31 23:59:59'
    
  • 方法2:用SQLite日期函数做类型转换
    利用SQLite内置的datetime()函数,把存储文本和查询文本都转换成标准时间格式后再比较,函数能自动识别多种日期格式:

    SELECT 
    * 
    FROM Tournament 
    WHERE datetime(DateTime) >= datetime('8/1/2023 12:00:00 AM') 
      AND datetime(DateTime) <= datetime('8/31/2023 11:59:59 PM')
    
  • 方法3:优化字段存储(长远方案)
    目前用TEXT存储ISO格式没问题,但如果追求更高性能,可以把DateTime字段改成INTEGER类型,存储Unix时间戳(比如DateTime.Now.Ticks或秒级时间戳),查询时直接用时间戳范围过滤,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:42:17