仅更新SQLite列中的年份

仅更新SQLite列中的年份,sqlite,Sqlite,我有一个SQLite3数据库,其中有366行,以及一年中每一天的日期。我需要确保年份是当前年份,如果不是,则需要将年份更新为当前日历年。我想做的事情如下: UPDATE daily SET date = DATE('%Y', 'now'); 或 但这些查询只会使日期列为空,即使它们确实按照我的预期工作,我怀疑它是否会保留已经存在的日期和月份 在MySQL中,我可以做一些类似于updatedaily SET date=ADDDATE(date,INTERVAL 1 YEAR)——但首先,它不是一

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

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

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

在MySQL中,我可以做一些类似于
updatedaily SET date=ADDDATE(date,INTERVAL 1 YEAR)
——但首先,它不是一个有效的SQLite查询,其次,我需要更新到当前年份,而不仅仅是升级一年

任何帮助都将不胜感激。

试试以下方法:

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;
它使用。首先从字段(
strftime('-%m-%d',d)
)开始计算月份和日期,然后添加(连接)当前年份(
strftime(“%Y',date('now')))
)并将其转换为日期

.

试试这个:

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;
它使用。首先从字段(
strftime('-%m-%d',d)
)开始计算月份和日期,然后添加(连接)当前年份(
strftime(“%Y',date('now')))
)并将其转换为日期


.

在数据库上运行python/其他脚本是一种选择吗?不,不幸的是,它不是,因为它是移动应用程序中嵌入的DB。我必须在应用程序启动时实现这一逻辑,这样即使应用程序在某人的设备上休眠数年,日期也不会过时。你能从应用程序读取日期,然后将其写回数据库吗?还是创建一个自定义函数从SQL调用?(). 使用大型strftime函数可能有一种不太明显的方法来实现这一点,但似乎只使用非sql代码会更省力。在数据库上运行python/other脚本是一种选择吗?不,不幸的是不是,因为它是移动应用程序中嵌入的DB。我必须在应用程序启动时实现这一逻辑,这样即使应用程序在某人的设备上休眠数年,日期也不会过时。你能从应用程序读取日期,然后将其写回数据库吗?还是创建一个自定义函数从SQL调用?(). 也许有一种不太明显的方法可以通过一个大的strftime函数来实现这一点,但似乎仅仅使用非sql代码就不那么麻烦了。谢谢你,先生!你让我开心。不仅效果很好,我还从你的解释中学到了很多。谢谢你,先生!你让我开心。不仅效果很好,而且我也能从你的解释中学到东西。