使用日期时得到错误的结果

时间:2014-01-04 03:30:00

标签: java sql date

String date1 = jTextField.getText();

String date2 = jTextField2.getText();

// using CDate...
pre=conn.prepareStatement("select * from Table where Date "
    + "between CDate(?) and CDate(?) order by Date");

pre.setString(1, date1); // bind param 1

pre.setString(2, date2); // bind param 2

ResultSet rs=pre.executeQuery();

当我们从2013年12月1日到2014年1月31日的日期时,我只会将截至2013年12月31日的记录退回。

另一个问题是,当我们从2014年1月1日到2014年12月31日截止日期时,它会返回2013年所有日期的记录。

请帮我解决这个问题。

谢谢。

我的日期列的数据类型为文本。

请提供正确的查询以查找两个字符串输入日期之间的日期记录。

2 个答案:

答案 0 :(得分:0)

您的日期列是日期时间而不是日期。

要比较这些值,范围内的日期将转换为日期时间,即日期的 stsrt 为零时。这就是为什么你没有看到最后一天的行。

要修复,请在结束日期添加一天并测试小于而不是 beteen 包含范围的结尾 - 即小于或等于。使用大于或等于作为开始。

答案 1 :(得分:0)

当您使用Ms Access数据库时,您的Date列的数据类型为Text。查看您的代码,您希望在两个日期之间搜索记录。所以这样做:

  • 打开您的数据库
  • 在设计视图中打开您的表格
  • 将日期列的数据类型更改为日期/时间

CDate()函数将返回日期为05/01/2013。

如果您将数据类型更改为日期/时间,则必须使用SimpleDateFormat将日期存储到数据库中:

SimpleDateFormat format=new SimpleDateFormat("dd/MM/yyyy");
String date=format.format(yourDate);

现在您可以将此日期存储到数据库中。

现在您的查询工作正常。