在Python中使用SQLite按时间范围过滤datetime列数据
解决SQLite中筛选00:00-06:00时间范围数据的问题
先说明你第二个SQL返回所有结果的核心问题:你用了OR而非AND。所有时间必然满足>= '00:00:00'或者<= '06:00:00',自然会返回全表数据,把OR改成AND就能修正这个逻辑错误。
正确筛选单行数据的方法
方法1:CAST转换时间类型后筛选
将date_run字段显式转换为时间类型,再用AND连接范围条件:
SELECT * FROM speedtests WHERE CAST(date_run AS TIME) >= '00:00:00' AND CAST(date_run AS TIME) <= '06:00:00';
方法2:用strftime提取时间部分
借助SQLite的strftime函数提取时间的时分秒部分,直接和目标时间字符串比较,逻辑更直观:
SELECT * FROM speedtests WHERE strftime('%H:%M:%S', date_run) BETWEEN '00:00:00' AND '06:00:00';
获取聚合统计值的写法
如果只需要该时间范围内的聚合结果,在正确的筛选条件基础上直接使用聚合函数即可:
SELECT MAX(date_run) AS latest_time, MIN(date_run) AS earliest_time, COUNT(*) AS total_rows, AVG(your_numeric_column) AS average_value -- 替换成你需要计算平均值的字段 FROM speedtests WHERE strftime('%H:%M:%S', date_run) BETWEEN '00:00:00' AND '06:00:00';
为什么最初的SQL无结果?
你第一次写的BETWEEN time("00:00:00") AND time("06:00:00"),是将datetime类型的date_run与纯time类型值比较,SQLite的隐式类型转换可能导致匹配逻辑失效,显式提取时间部分或转换类型就能解决这个问题。
内容的提问来源于stack exchange,提问作者Micky
相关产品推荐
相关产品推荐

