2013-10-17 38 views
1

我有一个SQLite3数据库,其中有366行,并且每年的每一天都有一个日期。我需要确保年份是最新的,如果不是,那么我需要将年份更新为当前日历年。我想这样做的是类似以下内容:仅更新SQLite列中的年份

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

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

但这些查询只是把日期列空,即使他们没有工作,因为我希望他们给我怀疑它会保留已经存在的日期和月份。

在MySQL中,我可以做类似于UPDATE daily SET date = ADDDATE(date, INTERVAL 1 YEAR)的事情 - 但首先,它不是一个有效的SQLite查询,其次,我需要更新到当年,而不仅仅是增加一年。

任何帮助,将不胜感激。

+0

正在数据库上运行python/other脚本的一个选项? – obmarg

+0

不,不幸的是,它不是,因为它是移动应用程序中的嵌入式数据库。我必须在应用程序启动时使此逻辑发生,因此即使应用程序在某人的设备上休眠数年,日期也不会过时。 – ryebread

+0

你可以从应用程序中读取日期,然后将它们写回到数据库?或者创建一个自定义函数来从SQL调用? (http://stackoverflow.com/questions/2108870/how-to-create-custom-functions-in-sqlite)。可能有一个非显而易见的方法来用一个大的strftime函数来做到这一点,但似乎只是使用非sql代码更省力。 – obmarg

回答

4

试试这个:

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

+0

谢谢,先生!你让我今天一整天都感觉很好。它不仅工作得很好,而且能够从你的解释中学习。 – ryebread