我有一个包含整数year
和month
列的SQLite表。我希望能够将它们“转换”为某些查询的日期类型,但我发现的最简单的方法很长且不直观:
...
date(
cast(year as text) || "-" ||
substr('0' || cast(month as text), -2, 2) ||
"-01" -- day of the month is irrelevant
)
...
有更清晰,更简洁和可重复使用的方法吗?
答案 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');