我是java编程的新手,我遇到了以下问题。
我有一个数据库(SQLite3)表,其中一列是以字符串(文本)格式存储DATE
的文本。由于某些原因,它必须是Text
而不是类型Date
(我甚至不知道Sqlite3是否支持日期数据类型)。
现在基于此文本日期,我想将表中的数据归档到:
Week : how much data has been entered in the table in this week.
Week starts from monday and ends on sunday.
So when I filter on week , I want the all the entries that have been
entered from Monday to this day of the week.
Similar results are expected when I want to filter data into month and year.
需要一些关于如何做到这一点的指示。 ? 感谢。
答案 0 :(得分:0)
我将举一个例子。你可以使用类似的技术月和年。请参阅http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
SELECT * FROM yourtable WHERE yourTimestamp >= CURDATE() - LEAST(6, DAYOFWEEK(CURDATE())-2)
DAYOFWEEK()将星期日定为1,星期六定为7.如果命令在星期日运行会怎样?为了满足这个要求,使用了LEAST(6,...)。
答案 1 :(得分:0)
您可以在此处执行的操作是使用java.Util.Calendar库从代码的db层创建查询。
Calendar now = Calendar.getInstance();
int year = now.get(Calendar.YEAR);
int month = now.get(Calendar.MONTH); // Note: zero based!
int dayofMonth = now.get(Calendar.DAY_OF_MONTH);
但是从java层形成这个查询最棘手的部分是获取自一周的第一天起经过的天数, 为此您需要使用 int dayofWeek = calendar.get(Calendar.DAY_OF_WEEK);
//如果当天是星期日,那天= 1。星期六,天= 7。
以下函数可以返回一周中已用天数的String数组 -
String[] elapsedDaysOfWeek(String dayOfWeek,String dayofMonth)
{
int dayOfWeek=Int.ParseInt(dayOfWeek);
int dayOfMonth=IntParseInt(dayOfMonth);
String[] days=new String(dayOfWeek);
days[0]=dayOfMonth;
for (int i=1;i<dayOfWeek;i++)
days[i]=(dayOfMonth-i).ToString();
return days;
}
因此,如果您调用elapsedDaysOfWeek(5,25) - 您将获得{25,24,23,22,21}的结果 - 您可以使用ÍN'关键字在查询中使用此数组 - 例如{25,24,23,22,21}
中的substr(datetext,1,2)