3

我有一个 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 查询,其次,我需要更新到当前年份,而不是仅仅增加一年。

任何帮助,将不胜感激。

4

1 回答 1

6

尝试这个:

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'))) 并将其转换为日期。

SQL Fiddle 现场示例

于 2013-10-17T21:09:19.770 回答