2015-04-03 16 views
0

我想从表中收集数据,然后在两个日期语句之间运行。该语句是在java字符串中创建的,然后使用statement.executeQuery()将字符串作为参数,由resultSet变量使用。 这是我创建了两个日期字符串:使用java字符串的两个日期语句之间的SQL

Calendar today = Calendar.getInstance(); 
     int month = today.get(Calendar.MONTH); 
     int year = today.get(Calendar.YEAR); 
     int endOfMonth = today.getActualMaximum(Calendar.DATE); 
     String sql; 
     if (month < 10) { 
      sql = "SELECT * FROM ORDERS WHERE DATE BETWEEN " + "#0" + month + "/01/" + year + "#" + " AND " + "#0" + month + "/" + endOfMonth + "/" + year + "#"; 

当我打印线这个字符串的结果是这样的:

SELECT * FROM ORDERS WHERE DATE BETWEEN #03/01/2015# AND #03/30/2015# 

然而,当我运行通过executeQuery方法这个字符串出现此错误:

java.sql.SQLSyntaxErrorException: Lexical error at line 1, column 41. Encountered: "#" (35), after : "". 
+2

为什么你使用''#而不是'''? – legohead 2015-04-03 12:51:41

+0

@legohead我正在关注一个网上教程,由于某种原因哈希,但这已经解决了这个问题,感谢这个 – 2015-04-03 12:55:14

+0

没问题,请看我的答案。 – legohead 2015-04-03 12:56:37

回答

3

在SQL的日期必须包含引号中'而不是井号标签#

一旦你改变他们这个查询应该工作。

SELECT * FROM ORDERS WHERE DATE BETWEEN '03/01/2015' AND '03/30/2015' 

不是

SELECT * FROM ORDERS WHERE DATE BETWEEN #03/01/2015# AND #03/30/2015# 
+0

“*在SQL中需要包含在引号内*”不是100%。 SQL **标准**仅定义了一种指定日期文字的单一方式:'日期'2015-01-03''而不是“简单”字符串。不管像'03/01/2015''这样的文字是否被接受并视为日期,在很大程度上取决于实际使用的DBMS。 – 2015-04-07 06:24:08

1

试试这个:

Calendar cal= Calendar.getInstance(); //Get the current date 
    SimpleDateFormat formatter= new SimpleDateFormat("yyyy/MMM/dd"); //format it as per your requirement 
    String today = formatter.format(cal.getTime()); 
    String lastday = formatter.format(cal.getActualMaximum(Calendar.DATE)); 

    String sql; 
    sql = "SELECT * FROM ORDERS WHERE DATE BETWEEN " + CONVERT(Char(10), today,112) + " AND " + CONVERT(Char(10), lastday ,112) 
相关问题