【问题标题】:How to fetch Records for a week如何获取一周的记录
【发布时间】:2018-02-20 10:10:32
【问题描述】:

我正在使用 Java 7 并获取一周的记录。对于 valid_from 列,我从下面的当前日期中减去 -7。 DB中日期的格式为12-FEB-18。对于 valid_to 列,我使用的是 sysdate。我没有得到正确的 valid_from 日期。任何人都可以查看这里有什么问题。

Format formatter = new SimpleDateFormat("dd-MMM-yy");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -7);
Date todate1 = cal.getTime();
Date startdate = ((DateFormat)formatter).parse(formatter.format(todate1));
System.out.println(todayWithZeroTime);

String sql_qry = "SELECT a.ACCOUNT_ID from tableName a where a.STATUS_TYPE_KEY='ACTIVE' "
    + "and a.VALID_FROM >"
    + startdate+ " and a.VALID_TO > sysdate";

我怎样才能在这里只解析日期。目前我收到Tue Feb 13 00:00:00 GMT 2018。我想要13-FEB-18,我可以在 where 条件下将其作为变量发送。
请推荐

【问题讨论】:

  • 我认为您希望在查询中使用 ? 占位符,然后使用 (Java 7) yourPreparedStatement.setDate 或 (Java 8) yourPreparedStatement.setObject 设置实际开始日期

标签: java date jdbc


【解决方案1】:

您正在将Date 转换为String,然后再转换回Date

然后您在查询中使用了这个 Date 对象,所以它的 toString() 方法被调用并产生一个 String 表示,这可能不是您想要的。

避免从StringDate 的最后一次转换,只需使用

String startdate = formatter.format(todate1);

请注意,您还必须使用引号对日期字符串进行转义:

 String sql_qry = "SELECT a.ACCOUNT_ID from tableName a where "
                 + "a.STATUS_TYPE_KEY='ACTIVE' "
                 + "and a.VALID_FROM > '"
                 + startdate+ "' and a.VALID_TO > sysdate";

还可以考虑查看Java time APIHow to use PreparedStatement

【讨论】:

  • 我试过了,但不幸的是我收到错误 Invalid column 因为它期望 Date 而不是字符串。我想。所以我尝试将 Date 发送到 select 语句
  • 您正在使用字符串连接,所以它最终还是一个字符串。查看更新的答案,似乎缺少一些引号。
  • 非常感谢。你能帮我解决一个场景中的 startdate 和 enddate 吗,每次 startdate 和 enddate 都会像上面一样按周计算,但我只需要第一次执行 5 年的数据。Like从 date=1-JAN-13 和 todate=sysdate 开始,然后是每周数据。
  • @Lisa14:考虑创建一个新问题来解释您想要做什么,以便其他人可以提供帮助。目前还不是很清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多