Between运算符日期相等无返回值及SQL查询结果不符求助
解决SQLite中BETWEEN查询带时间的日期字段无结果的问题
这问题我之前在SQLite里踩过同款坑!核心原因是你忽略了datetime字段包含时间部分,而直接用纯日期字符串做BETWEEN比较时,SQLite会自动把纯日期解析为当天的零点('2018-04-03 00:00:00'),你的记录里Date字段是'2018-04-03 18:30:00',显然比当天零点晚,所以不在BETWEEN '2018-04-03' AND '2018-04-03'的区间里,自然查不到结果。
给你三个可行的解决方案:
方案1:将结束日期设为下一天的零点
因为BETWEEN是闭区间,把结束时间设为目标日期的下一天,就能包含目标日期当天所有时间的记录:SELECT * FROM Products WHERE Date BETWEEN '2018-04-01' AND '2018-04-04';方案2:用DATE()函数提取日期部分比较
SQLite的DATE()函数可以从datetime字符串中提取纯日期部分,这样不管时间是几点,只要日期在区间内就会被匹配:SELECT * FROM Products WHERE DATE(Date) BETWEEN '2018-04-01' AND '2018-04-03';方案3:用>=和<组合查询(推荐)
这种写法更直观,避免BETWEEN闭区间带来的歧义,明确包含起始日期及之后,且小于结束日期的下一天:SELECT * FROM Products WHERE Date >= '2018-04-01' AND Date < '2018-04-04';
另外要注意,SQLite里并没有专门的datetime类型,这类字段实际是存储为文本的,比较时是按字符串字典序来的,所以一定要确保日期格式是YYYY-MM-DD HH:MM:SS这种标准格式,否则可能出现比较错误。
内容的提问来源于stack exchange,提问作者L. Page
相关产品推荐
相关产品推荐

