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

SQLite使用STRFTIME提取年份异常:返回NULL或-4707求助

SQLite日期字段提取年份问题解决

问题原因分析

  • 执行SELECT STRFTIME('%Y', '2023');返回NULL:因为'2023'不是SQLite日期函数可识别的有效格式,STRFTIME仅支持解析符合ISO 8601规范的完整日期/时间字符串(如YYYY-MM-DD、YYYY-MM-DD HH:MM:SS等),单独年份无法被判定为合法日期。
  • 执行SELECT STRFTIME('%Y', '2023-1-1');返回-4707:这是SQLite对不规范日期格式(月份/日期为单数字)的解析异常,导致被错误识别为公元前年份。

正确解决方案

  1. 规范日期存储格式
    存储日期时统一使用YYYY-MM-DD格式(月份和日期补为两位数字,如2023-01-01),此时STRFTIME可正常提取年份:

    SELECT STRFTIME('%Y', '2023-01-01'); -- 返回 '2023'
    
  2. 修复已存在的不规范日期
    如果数据库中已有YYYY-M-D格式的日期,可通过DATE()函数先标准化格式,再提取年份:

    SELECT STRFTIME('%Y', DATE('2023-1-1')); -- 返回 '2023'
    

    DATE()函数能自动识别并转换部分不规范格式为标准YYYY-MM-DD,让STRFTIME正常工作。

  3. 直接字符串截取年份
    若日期字段格式固定为YYYY或YYYY-M-D,也可跳过日期解析,直接截取字符串获取年份:

    -- 从'2023'提取年份
    SELECT SUBSTR('2023', 1, 4); -- 返回 '2023'
    -- 从'2023-1-1'提取年份
    SELECT SUBSTR('2023-1-1', 1, 4); -- 返回 '2023'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:27:07