使用java字符串的两个日期之间的SQL语句

使用java字符串的两个日期之间的SQL语句,java,sql,between,sql-date-functions,Java,Sql,Between,Sql Date Functions,我试图从一个表中收集数据,然后运行一个介于两个日期之间的语句。该语句在java字符串中创建,然后由resultSet变量使用statement.executeQuery()将该字符串作为参数使用。 这是我为两个日期创建字符串的方式: Calendar today = Calendar.getInstance(); int month = today.get(Calendar.MONTH); int year = today.get(Calendar.YEAR);

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

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 + "#";
但是,当我通过executeQuery方法运行此字符串时,会出现以下错误:

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

在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# 

在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# 
试试这个:

  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)
试试这个:

  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)

为什么您使用的是
#
而不是
'
?@legohead我在网上学习一个教程,该教程由于某种原因使用了散列,但这已经解决了问题。谢谢。没问题,请查看我的答案。您使用的是哪种DBMS(Postgres、Oracle等)?日期文字-即使是由SQL标准定义的-在不同的DBMS之间也有很大的不同。为什么您使用
#
而不是
'
?@legohead我在网上看了一个教程,出于某种原因它有哈希,但这已经解决了问题。谢谢。没有问题,请查看我的答案。哪个DBMS(Postgres、Oracle等)您使用的是日期文字吗?尽管由SQL标准定义,但在不同的DBMS中,日期文字是非常不同的。“在SQL中..需要包含在引号中”不是100%。SQL标准只定义了一种指定日期文字的方法:
Date'2015-01-03'
,而不是“普通”字符串。是否接受像
03/01/2015'
这样的文本并将其视为日期在很大程度上取决于实际使用的DBMS。“在SQL中..需要包含在引号中”不是100%。SQL标准只定义了一种指定日期文本的方法:
date'2015-01-03'
字符串。是否接受像
03/01/2015'
这样的文本并将其视为日期在很大程度上取决于实际使用的DBMS。