2

我想在 start_date 到 end_date 之间获取结果,以便找到我的产品报告。

sql = new StringBuilder()
            .append(" select oi.last_modified,oi.product_key")                      
            .append(" from orders o join order_item oi ")
            .append(" on oi.id_order = o.id  ");
            .append(" AND o.created between '")
            .append(":start_date")  // line - 1
            .append("' and '")      
            .append(":to_date");    // line - 2

在这两行(第 1 行和第 2 行)中,我正在尝试使用我正在使用的预防技术

MapSqlParameterSource namedParams = new MapSqlParameterSource();

所以为了实现这一点,我尝试了很多组合但没有运气。

namedParams.addValue("start_date","start_date",Types.TIMESTAMP);
namedParams.addValue("to_date","to_date",Types.VARCHAR);

对于不同的尝试,我得到不同的错误。IE

  • java.util.Date 不能转换为 java.sql.Date
  • 带有时区的时间戳类型的输入语法无效
4

2 回答 2

3

我认为这还取决于您的数据库字段的数据类型。例如在 MySQL 中有date,datetimetimestamp. 对我来说,有一个 MySQLdatetime并使用 java.util.Date 对象创建java.sql.Date并指定Types.TIMESTAMP工作(startDate作为java.util.Date对象):

MapSqlParameterSource namedParams = new MapSqlParameterSource();
namedParams.addValue("start_date", new java.sql.Date(startDate.getTime()), Types.TIMESTAMP);
于 2018-09-06T15:46:47.523 回答
0

我删除了单引号,它对我有用。

dynamicColumnsQuery = new StringBuilder();

dynamicColumnsQuery.append("SELECT concat(TO_CHAR(months, 'MonYY'),' Adverts') AS monthYear FROM generate_series(  CAST(:fromDate");

dynamicColumnsQuery.append(" as DATE) ,  CAST(:toDate");

dynamicColumnsQuery.append(" as DATE) , '1 month' ) AS months");
于 2021-04-19T18:18:25.877 回答