Java中的SQL语句按日期(月)排序

时间:2017-04-08 12:11:12

标签: java android mysql sql calendar

我的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;

即使该时段有大量数据,查询也会返回空。 我相信这里的数据格式有问题。你能帮帮我解决这个问题吗? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

  1. 您没有格式化firstD,因此您只能从当月的第一天开始;
  2. 您应该在查询中的日期周围使用单引号或使用预准备语句,否则您的服务器会将您的日期理解为数学运算;
  3. 查询日期范围时,请记住,如果您没有指定日期,则默认情况下SQL会将其视为零小时(0:00:00.0000)。如果你在startDate和今天#34;之间使用"你只能在今天的午夜时分。如果你在startDate和明天"之间使用"你也会在明天的午夜之前。你应该使用" date> = startDate和date<明天"获得适当的范围。
  4. 使用日期编写查询时,我总是更喜欢使用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);