SQLite数据迁移:如何将字符串start_time转为长整型存入新列?
可以仅通过SQL命令完成该数据迁移操作
SQLite内置的类型转换、时间处理函数完全支持你需要的字符串转长整型的批量同步需求,操作步骤如下:
操作步骤
- 第一步:新增
start_time_int字段
执行以下SQL添加长整型存储字段,SQLite的INTEGER类型最大支持9223372036854775807的取值,完全覆盖常用Long类型的数值范围:ALTER TABLE my_table ADD COLUMN start_time_int INTEGER; - 第二步:批量同步旧字段值到新字段
根据你的start_time存储格式选择对应SQL:- 若
start_time存的是数字形式的字符串(例如"1704081600000"这类时间戳字符串),直接用CAST做类型转换即可:
UPDATE my_table SET start_time_int = CAST(start_time AS INTEGER);- 若
start_time存的是格式化时间字符串(例如"2024-01-01 12:00:00"),通过strftime函数转成时间戳:
-- 转13位毫秒级时间戳(符合常用long类型时间戳规范) UPDATE my_table SET start_time_int = strftime('%s', start_time) * 1000; - 若
- 第三步:校验转换结果(可选但推荐)
先查询是否存在转换异常的行,SQLite转换非法数字字符串为整数时会返回0或截断有效值,异常行可以单独处理:
也可以随机抽查行确认两个字段值对应关系正确:SELECT * FROM my_table WHERE start_time_int IS NULL OR start_time_int = 0;SELECT start_time, start_time_int FROM my_table LIMIT 10;
注意:如果表数据量较大,建议在业务低峰期执行UPDATE操作避免锁表影响线上业务。如果需要后续新增/更新数据时自动同步两个字段的值,可以新增SQLite触发器自动维护
start_time_int,无需业务代码双写。
内容的提问来源于stack exchange,提问作者Kirtap
相关产品推荐
相关产品推荐

