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

SQLite中'2021-07-31 13:53:26'格式日期如何实现过滤与年月分组统计

SQLite日期字段提取年月分组统计解决方案

问题原因

你遇到的返回null问题核心是SQLite内置时间函数(date/datetime/strftime)对输入格式有严格要求,只要字段值存在以下任意一种情况都会返回null:

  • 存在首尾空格、不可见特殊字符
  • 日期/月份/小时等数值未补前导零(如2021-7-31而非2021-07-31)
  • 时间值本身不合法(如月份为13、日期为32等)
    分组后出现null分组是解析失败的行聚合生成的结果。

解决方案

方案1:字符串截取法(最稳妥,兼容绝大多数场景)

如果你的started_at字段统一为YYYY-MM-DD HH:MM:SS格式,直接截取前7位即可得到YYYY-MM格式的年月,无需调用时间函数,性能更高也不会出现解析null问题:

SELECT 
  SUBSTR(started_at, 1, 7) AS year_month,
  COUNT(*) AS record_count
FROM bike_trip
-- 这里添加你需要的WHERE过滤条件,例如过滤2021年全年的数据
-- WHERE SUBSTR(started_at, 1, 7) BETWEEN '2021-01' AND '2021-12'
WHERE SUBSTR(started_at, 1, 7) LIKE '____-__' -- 过滤非法格式的行
GROUP BY year_month
ORDER BY year_month;

方案2:修正时间函数调用

如果需要用到时间函数做更复杂的时间运算,先对字段做trim处理清理空白字符,同时调整格式化符得到带横杠的年月格式:

SELECT 
  strftime('%Y-%m', TRIM(started_at)) AS year_month,
  COUNT(*) AS record_count
FROM bike_trip
-- 这里添加时间过滤条件,例如过滤2021年7月及以后的数据
-- WHERE strftime('%Y-%m', TRIM(started_at)) >= '2021-07'
WHERE strftime('%Y-%m', TRIM(started_at)) IS NOT NULL -- 过滤解析失败的行
GROUP BY year_month
ORDER BY year_month;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:36:01