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

SQLite中BETWEEN仅比较日期日部分而非完整日期的问题

SQLite日期查询无结果的原因与解决方法

根本原因

你的date_added列存储的是DD/MM/YYYY格式的字符串,而非SQLite标准的日期格式(ISO8601:YYYY-MM-DD)。SQLite对字符串的比较是逐字符按字典序进行,不是按日期逻辑判断:

  • 第一个查询中,'29/08/2023'与'31/08/2023'的前两位字符29 < 31,后续月份、年份一致,字符串对比结果和日期逻辑一致,所以能返回数据。
  • 第二个查询中,'01/09/2023'的第一个字符0小于'29/08/2023'的第一个字符2,因此整个字符串'01/09/2023' < '29/08/2023',between要求date_added >= '29/08/2023'且date_added <= '01/09/2023',没有数据能同时满足这两个条件,所以无结果。

临时解决方法

使用SQLite的strftime函数,将DD/MM/YYYY格式的字符串转换为标准ISO格式后再比较:

select * 
from sold 
where strftime('%Y-%m-%d', date_added, '%d/%m/%Y') between '2023-08-29' and '2023-09-01'

其中第三个参数'%d/%m/%Y'用于指定输入字符串的日期格式,让SQLite正确解析。

长期优化方案

修改表结构,将date_added列改为存储ISO8601格式的字符串(如YYYY-MM-DD HH:MM:SS),或直接使用SQLite的DATE/DATETIME类型(本质为TEXT,但强制遵循ISO格式)。后续插入数据时统一按该格式存储,这样日期比较、排序、函数计算都能直接按日期逻辑执行,避免字符串对比的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:12:11