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

如何在SQLite3中将"2022.7.1"格式字符串转为"2022-07-01"?

解决SQLite日期字符串格式转换问题

方法一:SQLite内置函数直接处理(批量高效)

如果数据量较大,直接在数据库层面处理更高效,利用SQLite的字符串函数分割日期部分并补零:

查询转换结果

SELECT 
    printf('%s-%02d-%02d',
        substr(date_str, 1, instr(date_str, '.') - 1),
        substr(date_str, instr(date_str, '.') + 1, instr(substr(date_str, instr(date_str, '.') + 1), '.') - 1),
        substr(date_str, length(date_str) - instr(reverse(date_str), '.') + 2)
    ) AS standard_date
FROM your_table;

直接更新数据库字段

如果需要永久修改字段内容,执行UPDATE语句:

UPDATE your_table
SET date_str = printf('%s-%02d-%02d',
    substr(date_str, 1, instr(date_str, '.') - 1),
    substr(date_str, instr(date_str, '.') + 1, instr(substr(date_str, instr(date_str, '.') + 1), '.') - 1),
    substr(date_str, length(date_str) - instr(reverse(date_str), '.') + 2)
);

逻辑说明:用instr定位分隔点,substr提取年、月、日部分,printf的%02d自动将单数字补为两位(如7→07,1→01)。

方法二:Python层面处理(灵活可控)

如果需要对异常日期做额外处理(比如过滤无效格式),可以用Python的datetime模块转换:

import sqlite3
from datetime import datetime

# 连接数据库
conn = sqlite3.connect('your_database.db')
cursor = conn.cursor()

# 查询原始日期数据(用rowid定位避免重复日期冲突)
cursor.execute("SELECT rowid, date_str FROM your_table")
rows = cursor.fetchall()

for row_id, raw_date in rows:
    try:
        # 分割日期部分并转换为整数
        year, month, day = map(int, raw_date.split('.'))
        # 格式化标准日期
        standard_date = datetime(year, month, day).strftime('%Y-%m-%d')
        # 更新数据库
        cursor.execute("UPDATE your_table SET date_str = ? WHERE rowid = ?", (standard_date, row_id))
    except ValueError:
        # 捕获无效日期(如月份>12、日期>31等)
        print(f"跳过无效日期: {raw_date} (行ID: {row_id})")

# 提交更改并关闭连接
conn.commit()
conn.close()

优势:可以通过try-except捕获并处理异常格式,更灵活可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:12:32