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

SQLite中UPDATE如何为每行生成不同毫秒级TIMESTAMP值?

解决SQLite中UPDATE时为每行生成带毫秒级差异的TIMESTAMP值

要实现每行的date2基于当前时间加上对应id的毫秒级偏移,可通过数值化时间计算的方式实现,避免直接拼接DATETIME修饰符的问题:

核心方案:利用JULIANDAY转换为数值计算偏移

SQLite的JULIANDAY()函数会将时间转换为以天为单位的数值,我们可以直接对这个数值进行毫秒级的偏移计算,再转换回带毫秒的时间格式:

UPDATE mytable
SET date2 = DATETIME(
    JULIANDAY('now', 'localtime') + (id / 86400000.0),
    'subsec'
);

原理说明:

  • 86400000是一天的毫秒总数(24*60*60*1000),id / 86400000.0就是将id对应的毫秒数转换为天单位的偏移量
  • 用DATETIME(..., 'subsec')将计算后的数值转回带毫秒的时间字符串,确保精度保留

优化方案:避免大id导致的时间偏移过大

如果你的id数值较大,担心偏移后时间偏离当前时间太多,可以对id取模,限制偏移范围在0-999毫秒内:

UPDATE mytable
SET date2 = DATETIME(
    JULIANDAY('now', 'localtime') + ((id % 1000) / 86400000.0),
    'subsec'
);

为什么之前的方法无效?

直接拼接'+' || id*0.001 || ' seconds'会因为浮点数的字符串格式化问题(比如出现科学计数法),导致DATETIME函数无法识别修饰符,而数值化计算则完全规避了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:30:01