SQLite:如何从整数年和月组件创建日期?

SQLite:如何从整数年和月组件创建日期?,sqlite,date,casting,Sqlite,Date,Casting,我有一个包含整数年和月列的SQLite表。我希望能够将它们“强制转换”为特定查询的日期类型,但我发现的最简单的方法是冗长且不直观的: ... date( cast(year as text) || "-" || substr('0' || cast(month as text), -2, 2) || "-01" -- day of the month is irrelevant ) ... 有没有更清晰、更简洁和可重用的方法来实现这一点?第一件事是删除该日期函数

我有一个包含整数
列的SQLite表。我希望能够将它们“强制转换”为特定查询的日期类型,但我发现的最简单的方法是冗长且不直观的:

...
date(
    cast(year as text) || "-" ||
    substr('0' || cast(month as text), -2, 2) ||
    "-01" -- day of the month is irrelevant
    )
...

有没有更清晰、更简洁和可重用的方法来实现这一点?

第一件事是删除该日期函数调用,因为sqlite中没有日期类型:

sqlite> select typeof(date('now'));
text
第二件事是删除强制转换,因为串联运算符将隐式地将数字转换为字符串:

sqlite> select 2011 || '-' || 1 || '-' || 1;
2011-1-1
sqlite> select typeof(2011 || '-' || 1 || '-' || 1);
text
这就是我所能想到的(除了删除substr调用的第三个参数),因此您的表达式要短得多:

year || "-" || substr('0' || month, -2)  || '-01'

我个人更喜欢使用date()函数,而不是在本例中使用substr()

要使用年和月整数获取日期,请执行以下操作:

select date(year ||'-01-01','+'||(month-1)||' month');
select date(year ||'-01-01','+'||(month-1)||' month','+'||(day-1)||' day');
要使用年、月和日整数获取日期,请执行以下操作:

select date(year ||'-01-01','+'||(month-1)||' month');
select date(year ||'-01-01','+'||(month-1)||' month','+'||(day-1)||' day');