仅更新 SQLite 列中的年份
Posted
技术标签:
【中文标题】仅更新 SQLite 列中的年份【英文标题】:Update only the year in SQLite column 【发布时间】: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 调用? (***.com/questions/2108870/…)。使用大 strftime 函数可能有一种不明显的方法,但似乎只使用非 sql 代码会更省力。 【参考方案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.
【讨论】:
谢谢您,先生!你让我今天一整天都感觉很好。它不仅效果很好,而且我能够从你的解释中学习。以上是关于仅更新 SQLite 列中的年份的主要内容,如果未能解决你的问题,请参考以下文章