如何在SQLite中将mm/dd/yyyy格式的日期转换为yyyy-mm-dd格式
SQLite中将mm/dd/yyyy格式日期转换为yyyy-mm-dd的操作方法
根据你使用的SQLite版本不同,有两类实现方案:
方案1:SQLite 3.39.0及以上版本(最简方案)
3.39.0版本开始SQLite原生支持strptime格式解析,可以直接识别非补零的mm/dd/yyyy格式,无需手动拆分。
- 仅查询时转换,不修改原有数据:
SELECT strftime('%Y-%m-%d', 你的日期字段名, '%m/%d/%Y') AS 格式化后日期 FROM 你的表名;
- 直接更新表内存储的日期格式:
操作前建议先备份全表数据,避免转换出错丢失数据
UPDATE 你的表名 SET 你的日期字段名 = strftime('%Y-%m-%d', 你的日期字段名, '%m/%d/%Y');
方案2:兼容所有SQLite版本
低版本没有内置日期解析函数,需要手动拆分月、日、年,补零后拼接,兼容非补零的日期格式(比如3/11/2000):
假设表名为user_info,存储日期的字段名为register_date,示例语句如下:
- 查询转换:
SELECT -- 提取年份:取第二个/之后的所有内容 substr(register_date, instr(register_date, '/', instr(register_date, '/') + 1) + 1) || '-' -- 提取月份:取第一个/之前的内容,补零到2位 || printf('%02d', substr(register_date, 1, instr(register_date, '/') - 1)) || '-' -- 提取日期:取两个/中间的内容,补零到2位 || printf('%02d', substr( register_date, instr(register_date, '/') + 1, instr(register_date, '/', instr(register_date, '/') + 1) - instr(register_date, '/') - 1 )) AS formatted_date FROM user_info;
- 批量更新表内数据:
UPDATE user_info SET register_date = substr(register_date, instr(register_date, '/', instr(register_date, '/') + 1) + 1) || '-' || printf('%02d', substr(register_date, 1, instr(register_date, '/') - 1)) || '-' || printf('%02d', substr( register_date, instr(register_date, '/') + 1, instr(register_date, '/', instr(register_date, '/') + 1) - instr(register_date, '/') - 1 ));
注意事项
转换后的yyyy-mm-dd格式是SQLite官方推荐的日期存储格式,后续做日期排序、计算、筛选时可以直接被SQLite内置日期函数识别,不需要再做格式转换。
内容的提问来源于stack exchange,提问作者Nadiaww
相关产品推荐
相关产品推荐

