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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:27:28