我的Android项目中有一个SQL表,其中包含日期格式的KEY_DATE字段。
KEY_DATE +“DATE,”
我的表格是从java代码( dd / mm / yy 格式的日期)填充的。 所以现在我需要做几个与日期相关的查询,而且有些东西不起作用。 今天,本月和今年我需要从桌子上做出选择。 这是我试过的:
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yy");
Date todayD = new Date();
dateFormat.format(todayD);
String today = dateFormat.format(todayD);
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 1);
Date firstDay = cal.getTime();
dateFormat.format(firstDay);
String selectQuery = "SELECT * FROM " + TABLE_PAYMENTS + "WHERE "
+ KEY_DATE +" BETWEEN " + firstDay + " AND " + today;
即使该时段有大量数据,查询也会返回空。 我相信这里的数据格式有问题。你能帮帮我解决这个问题吗? 提前谢谢。
答案 0 :(得分:3)
firstD
,因此您只能从当月的第一天开始; 使用日期编写查询时,我总是更喜欢使用ISO格式作为日期字符串:yyyy-MM-dd。
Calendar cal = Calendar.getInstance(); DateFormat dateFormat = new SimpleDateFormat(" yyyy-MM-dd");
今天的日期D =新的日期(); cal.setTime(todayD); cal.add(Calendar.DATE,1); 明天的日期D = cal.getTime(); String today = dateFormat.format(tomorrowD);
cal.set(Calendar.DAY_OF_MONTH,1); Date firstD = cal.getTime(); String firstDay = dateFormat.format(firstD);
String selectQuery =" SELECT * FROM TABLE_PAYMENTS WHERE KEY_DATE> ='" + firstDay +"' AND KEY_DATE< '" +今天+"'";
答案 1 :(得分:2)
问题在于数据库中存在的数据的日期格式以及您传递给字符查询的日期格式(字符串)。
将日期作为字符串参数传递给sql查询不是一个好习惯,所以我强烈建议使用preparedStatement
,如下所示:
Date todayD = new Date();
Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH, 1);
Date firstDay = cal.getTime();
String selectQuery = "SELECT * FROM TABLE_PAYMENTS WHERE BETWEEN ? AND ?" ;
//create preparedStatement here
preparedStatement.setDate(1, firstDay);
preparedStatement.setDate(2, todayD);