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

如何在SQLite中仅更新timestamp列年份为2025(保留月日时分秒)

如何在SQLite中将timestamp列的年份更新为2025并保留月日时分秒

需求说明

需要将SQLite表t中d列(timestamp类型)的年份统一替换为2025,同时保留原日期的月份、日期、小时、分钟、秒信息。

原语句问题分析

你尝试的SQL语句存在两处关键错误:

  1. datetime(2059)是无效的日期格式,无法正确生成年份字符串;
  2. 仅提取了原日期的-%m-%d部分,漏掉了时间信息%H:%M:%S,会导致时间部分丢失。

正确SQL语句

以下两种方法都可以实现需求,推荐第一种更直观的写法:

方法一:直接拼接年份与原日期的月日时分秒部分

UPDATE t
SET d = datetime('2025-' || strftime('%m-%d %H:%M:%S', d));

原理:

  • strftime('%m-%d %H:%M:%S', d)从原日期中提取出-MM-DD HH:MM:SS格式的子串;
  • 与固定年份2025拼接后,形成完整的目标日期时间字符串;
  • datetime()函数将拼接后的字符串转换为SQLite支持的日期时间类型,确保数据格式合法。

方法二:通过年份偏移计算更新

UPDATE t
SET d = datetime(d, 'start of year', '+' || (2025 - strftime('%Y', d)) || ' years');

原理:

  • strftime('%Y', d)获取原日期的年份;
  • 计算目标年份2025与原年份的差值,通过+N years的偏移量将原日期年份调整为2025;
  • 'start of year'确保从年份起始点计算偏移,避免因闰年等特殊情况导致日期异常。

验证效果

执行上述语句后,原数据会被更新为期望结果:

2025-01-01 09:30:00
2025-03-06 12:00:00
2025-01-01 17:24:00
2025-07-03 04:30:00
2025-01-01 05:50:00
2025-09-03 06:30:00
2025-01-01 23:30:00
2025-01-01 08:30:00
2025-01-01 09:30:00

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 04:02:59