如何在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
相关产品推荐
相关产品推荐

