0

我想在特定日期之间进行搜索。例如,从 2012 年 8 月 1 日到 2012 年 8 月 13 日。按此标准搜索会为我提供数据库中输入的值。如果我在 2012 年 8 月 2 日完成,查询返回 null ......更奇怪的是,当我选择第 10、第 11 或第 12 个日期时,它工作正常并给我结果......我疯了想知道问题出在哪里可能是调试并没有把我带到任何地方......请帮忙?

/**query to get the details by giving all the dates/
public Cursor getName_Intime_Outtime_Date(String fromdate,String todate)
   {
    Log.d("pavan","in side the getnameintime out time date() of visistor adapter");
   return this.db.query(DATABASE_TABLE_VISITOR,
      new String[]{KEY_NAME,KEY_CHECKIN,KEY_CHECKOUT,KEY_DATE},
      KEY_DATE + " BETWEEN ? AND ?", 
      new String[] {fromdate ,todate}, 
      null, null, null, null);
   }
4

3 回答 3

0

谢谢你们真正研究这个......最后使用这个链接https://groups.google.com/forum/?fromgroups#!topic/android-developers/Ey_4rBZx2t0%5B1-25%5D中的想法解决了这个问题。 ...总结一下我所做的是获取一个日历对象,使用日历对象检索当前日期,将检索到的数据提供给一个 simpledateformat 对象并对其进行比较..这是示例代码.. .

int test = date_pick.getMonth()+1;
     Toast.makeText(getBaseContext(), "Date seleted month"+test+"/"+date_pick.getDayOfMonth()+"/"+date_pick.getYear(), Toast.LENGTH_LONG).show();

      Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));  
        cal.set(Calendar.YEAR, date_pick.getYear());
        cal.set(Calendar.MONTH, test);
        cal.set(Calendar.DAY_OF_MONTH, date_pick.getDayOfMonth());

       /* retriving the yyyy mm dd values here*/
         set_year = cal.get(Calendar.YEAR);
         set_month= cal.get(Calendar.MONTH);
         set_day = cal.get(Calendar.DAY_OF_MONTH);
         Log.d("kunal","datesis "+set_year+" "+set_month+" "+set_day);
         string_date = set_year+"-"+set_month+"-"+set_day;


     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
     try {
       d1 = sdf.parse(string_date);
      Log.d("kunal","date came "+d1);
      System.out.println(sdf.format(d1));      

     } catch (ParseException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
      date_txt.setText(sdf.format(d1));
于 2012-08-16T11:36:59.783 回答
0

Sqlite 没有日期的数据类型。可能您将日期作为 TEXT 保存为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
我建议您将表中的日期字段保存为 sqlLite 数据类型INTEGER,如 Unix 时间、自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数或BIGINT(以毫秒为单位的长 java 时间版本)。

这样,在BETWEEN与数字一起使用时,您将返回一个正确的值。

编辑您可以使用日期和时间函数
从查询中管理您的日期字符串。这意味着您仍然可以将日期用作字符串,但是当在 sql WHERE 子句中使用 stringDates 时,使用转换函数执行转换为“DATE”。

于 2012-08-13T11:25:36.827 回答
0

试试这个,它对我有用, SELECT * FROM table_name where substr(column_name,7)||substr(column_name,4,2)||substr(column_name,1,2) between 'YYMMDD' and 'YYMMDD' ,日期应该是相反的顺序,例如:如果日期格式是 DD/MM/YY 或 DD-MM-YY,你可以使用 'YYMMDD'

于 2012-08-16T05:49:47.977 回答