【发布时间】:2013-10-25 07:33:39
【问题描述】:
我目前正在编写一个 Java Swing 应用程序,它从 MYOB 数据库文件中读取数据并在表中显示某些信息。我已经能够成功生成所需的 SQL 语句,但在添加日期之间搜索的功能时遇到了麻烦(我们的数据库非常大,所以我们试图限制结果)。下面是我的一个查询示例(用 Java 编写):
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
+ "FROM sales, customers "
+ "WHERE sales.CardRecordID = customers.CardRecordID "
+ "AND customers.Name = 'Cash Sales' "
+ "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
+ ";");
我有两个日期(它们实际上是 Java 中的字符串,但格式为 dd/MM/yyyy)。
我尝试在 WHERE 中使用另一个 AND 子句和 BETWEEN 语句,但我从 JDBC [MYOB ODBC]Error getting the literal value of right operand. 收到以下错误
实际陈述如下:
rs = stmt.executeQuery("SELECT sales.InvoiceNumber, sales.ShipToAddress, sales.Date "
+ "FROM sales, customers "
+ "WHERE sales.CardRecordID = customers.CardRecordID "
+ "AND customers.Name = 'Cash Sales' "
+ "AND sales.Date BETWEEN " + sdate + " AND " + edate + " "
+ "ORDER BY sales.ShipToAddress ASC, sales.Date DESC"
+ ";");
有人能帮我找出正确的语法吗?这是缺少的最后一个功能。
编辑:sdate 和 edate 的当前值分别为 25/10/2013,因为它们默认为今天的日期。我已经设置了我正在测试的虚拟文件,以确保它将提供具有此日期范围的数据。另外为澄清起见,我希望搜索日期包含在内。
【问题讨论】:
-
sdate 和 edate 的值是什么?
-
当前日期为 25/10/2013(这将是日期的标准格式,也总是 dd/MM/yyyy)
-
我不确定,但也许您需要将字符串转换为日期。比如
... BETWEEN CAST( '" + sdate + "' AS DATE)等等