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

时间:2011-07-16 14:50:18

标签: sqlite date casting

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

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

有更清晰,更简洁和可重复使用的方法吗?

2 个答案:

答案 0 :(得分:2)

首先要删除日期函数调用,因为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'

答案 1 :(得分:0)

我个人更喜欢使用date()函数,而不是substr()。

要获取具有年和月整数的日期:

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

要获取具有年,月和日整数的日期:

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