【问题标题】:Update only the year in SQLite column仅更新 SQLite 列中的年份
【发布时间】:2013-10-17 20:35:32
【问题描述】:

我有一个 SQLite3 数据库,其中包含 366 行,以及一年中每一天的日期。我需要确保年份是当前的,如果不是,那么我需要将年份更新为当前日历年。我想做的是如下所示:

UPDATE daily SET date = DATE('%Y', 'now');

UPDATE daily SET date = strftime('%Y', 'now');

但是这些查询只是将日期列设为 NULL,即使它们确实按我预期的那样工作,我怀疑它是否会保留已经存在的日期和月份。

在 MySQL 中,我可以执行UPDATE daily SET date = ADDDATE(date, INTERVAL 1 YEAR) 之类的操作——但首先,它不是一个有效的 SQLite 查询,其次,我需要更新到当前年份,而不是仅仅提高一年。

任何帮助将不胜感激。

【问题讨论】:

  • 是否可以在数据库上运行 python/其他脚本?
  • 不,不幸的是它不是,因为它是一个嵌入在移动应用程序中的数据库。我必须在应用启动时执行此逻辑,因此即使应用在某人的设备上休眠数年,日期也不会过时。
  • 你能从应用程序中读取日期然后将它们写回数据库吗?或者创建一个自定义函数以从 SQL 调用? (stackoverflow.com/questions/2108870/…)。使用大 strftime 函数可能有一种不明显的方法,但似乎只使用非 sql 代码会更省力。

标签: sqlite


【解决方案1】:

试试这个:

create table t (id int, d text);

insert into t
select 1, date('2011-01-01') union
select 2, date('2012-03-11') union
select 3, date('2013-05-21') union
select 4, date('2014-07-01') union
select 5, date('2015-11-11');

select * from t;

update t set
    d = date(strftime('%Y', date('now')) || strftime('-%m-%d', d));

select * from t;

它使用Date And Time Functions。首先从字段 (strftime('-%m-%d', d)) 中获取月份和日期,然后添加(连接)当前年份 (strftime('%Y', date('now'))) 并将其转换为日期。

SQL Fiddle live example.

【讨论】:

  • 谢谢您,先生!你让我今天一整天都感觉很好。它不仅效果很好,而且我能够从你的解释中学习。
猜你喜欢
  • 2020-04-23
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多