我有一个表,我把日期作为长,当我把它转换回字符串,它将是"dd/mm/yyyy"。我想获取某些数据与月和年,所以自定义查询将像这样:
SELECT id FROM things
WHERE MONTH(happened_at) = 1 AND YEAR(happened_at) = 2009;
示例表具有如下数据:
| 身份证|发生于|
| - ------|- ------|
| 1个|二○ ○九年一月一日十二时零八分|
| 第二章|二○ ○九年二月一日十二时|
| 三个|2009年1月12日09时40分|
| 四个|2009年1月29日17时55分|
我想知道如何像上面的例子那样获取数据,其中happened_at是long格式,而不是String格式。
我目前正在学习使用java和房间数据库制作android应用程序,所以我做了一个转换器来将Date转换为long。转换器是这样的:
import androidx.room.TypeConverter;
import java.util.Date;
public class DateConverter {
@TypeConverter
public static Date fromTimestamp(Long value)
{ return value == null ? null :
new Date(value);
}
@TypeConverter
public static Long dateToTimestamp(Date date)
{
return date == null ? null :
date.getTime();
}
}
1条答案
按热度按时间fxnxkyjh1#
尝试使用:-
这是因为:
getTime()
方法返回自1970年1月1日00:00:00 GTM以来的毫秒数,由Date对象表示。strftime
是SQLite的日期/时间函数,可用于从已识别类型转换/格式化日期(参见链接第2节)unix_epoch
修饰符使SQLitestrftime
函数能够区分儒略日(不带"unixepoch"修饰符)或Unix时间值(带修饰符)。'%m'
将月份检索为字符串,前面用0填充,使其始终为2个字符,'%Y'
用于年份部分。CAST
表达式从结果中剥离0之前的值(如果它们存在),即将01转换为1。SELECT id FROM things WHERE 0 + strftime('%m',happened_at / 1000,'unixepoch') = 1 AND 0 + strftime('%Y',happened_at / 1000,'unixepoch') = 2009;