【问题标题】:getting wrong result when working with dates使用日期时得到错误的结果
【发布时间】:2014-01-04 03:29:59
【问题描述】:
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 年 1 月 12 日到 2014 年 1 月 31 日时,它只会返回到 2013 年 12 月 31 日的记录。

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

请帮我解决这个问题。

谢谢。

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

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

【问题讨论】:

  • 什么是CDate函数?你的表声明是什么?让我们看一些示例数据。
  • CDate是将字符串日期转换为Date格式
  • 那么让我们看看它的主体,你的 DB 是什么?
  • 我正在使用 MS Access DB
  • @MessyProgrammer 您的问题需要改进。您是否使用 JDBC 驱动程序连接到 MS Access?谁的司机?您能否提供用于存储日期值的数据类型的 Access 文档的链接?而对于 Cdate 函数。如果您以文本类型存储值,为什么要调用 CDATE 来创建日期值?

标签: java sql date


【解决方案1】:

当您使用 Ms Access 数据库时,您的日期列的数据类型为文本。查看您想要搜索两个日期之间的记录的代码。这样做:

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

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

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

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

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

现在您的查询可以正常工作了。

【讨论】:

  • @Jugadu-我已将 Date 列的数据类型更改为 Date/Time ,它工作正常。谢谢。
【解决方案2】:

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

为了比较这些值,将范围中的日期转换为 datetime,即日期 stsrt 处的零百小时。这就是为什么您没有看到最后一天的行。

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

【讨论】:

  • 我的日期列将文本作为数据类型
  • 那么CDate函数是什么?
  • @Bohemian (a) 你的第一行是指“约会”而不是“敢”吗? (b) 与其减去 1 秒,不如在新一天的那一刻测试“小于”。根据数据库的不同,日期时间的存储时间可能只有几分之一秒,因此可能存在“23:59:59”和“00:00:00”之间的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多