仅更新 SQLite 列中的年份

rye*_*ead 2 sqlite

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

UPDATE daily SET date = DATE('%Y', 'now');
Run Code Online (Sandbox Code Playgroud)

或者

UPDATE daily SET date = strftime('%Y', 'now');
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助,将不胜感激。

Mic*_*aga 5

尝试这个:

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;
Run Code Online (Sandbox Code Playgroud)

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

SQL Fiddle 现场示例