无编程经验者求助:SQLite时间字段截断毫秒(不四舍五入)
解决SQLite中截断时间列毫秒(不四舍五入)的方法
别担心,虽然你之前没接触过SQLite,但这个操作其实很容易上手,我给你两种实用的方法,分别适合临时查看和永久修改数据:
方法一:临时查询时截断毫秒(不修改原数据)
如果你只是想先看看截断后的效果,不想改动数据库里的原始数据,可以用SQL查询语句来实时处理:
方式1:用字符串截取(简单直接)
SQLite里的时间字符串格式是固定的YYYY-MM-DD HH:MM:SS.fff,前19个字符正好是不带毫秒的部分,所以用substr函数直接截取即可:
SELECT substr(本地时间, 1, 19) AS 本地时间_无毫秒, substr(PC时间, 1, 19) AS PC时间_无毫秒, substr(UTC时间, 1, 19) AS UTC时间_无毫秒, substr(记录保存时间, 1, 19) AS 记录保存时间_无毫秒 FROM 你的表名;
方式2:用时间格式化函数(更规范)
用SQLite自带的strftime函数,指定格式化到秒的格式,它会自动忽略毫秒部分,不会四舍五入:
SELECT strftime('%Y-%m-%d %H:%M:%S', 本地时间) AS 本地时间_无毫秒, strftime('%Y-%m-%d %H:%M:%S', PC时间) AS PC时间_无毫秒, strftime('%Y-%m-%d %H:%M:%S', UTC时间) AS UTC时间_无毫秒, strftime('%Y-%m-%d %H:%M:%S', 记录保存时间) AS 记录保存时间_无毫秒 FROM 你的表名;
在SQLiteStudio里操作:点击顶部的「SQL Editor」标签,输入上面的语句,把你的表名换成实际的表名称,然后点击执行按钮(绿色播放箭头)就能看到结果了。
方法二:永久修改表中的数据(截断所有时间列的毫秒)
如果需要把数据库里的时间列永久改成不带毫秒的格式,一定要先备份数据库(操作不可逆!):
- 在SQLiteStudio里右键你的数据库,选择「Backup database」,保存备份文件到安全的位置。
- 打开SQL Editor,输入更新语句,一次性处理所有时间列:
UPDATE 你的表名 SET 本地时间 = substr(本地时间, 1, 19), PC时间 = substr(PC时间, 1, 19), UTC时间 = substr(UTC时间, 1, 19), 记录保存时间 = substr(记录保存时间, 1, 19);
或者用strftime版本:
UPDATE 你的表名 SET 本地时间 = strftime('%Y-%m-%d %H:%M:%S', 本地时间), PC时间 = strftime('%Y-%m-%d %H:%M:%S', PC时间), UTC时间 = strftime('%Y-%m-%d %H:%M:%S', UTC时间), 记录保存时间 = strftime('%Y-%m-%d %H:%M:%S', 记录保存时间);
- 执行语句后,刷新表(右键表名选「Refresh」),就能看到所有时间列的毫秒都被截断了。
关键说明
这两种方法都是直接截断毫秒,不会四舍五入:
substr是直接截取前19个字符,不管毫秒是0.1还是0.9,都直接去掉;strftime函数在解析带毫秒的时间字符串时,只会提取到秒的部分,完全忽略后面的毫秒值,不会进行任何进位。
内容的提问来源于stack exchange,提问作者cicco franco
相关产品推荐
相关产品推荐

