在java代码中返回ORA-00904的日期格式,但在sql developer中不返回
我正在使用SpringJDBCTemplate查询我的数据在java代码中返回ORA-00904的日期格式,但在sql developer中不返回,java,sql,oracle,oracle-sqldeveloper,Java,Sql,Oracle,Oracle Sqldeveloper,我正在使用SpringJDBCTemplate查询我的数据 我的代码中有以下查询 static final String SQL = SELECT msgs.msg_submit_date MSG_DATE FROM {0}.messages msgs WHERE TRUNC(msgs.msg_submit_date) BETWEEN TO_DATE(:startDate,'YYYY-MM-DD') AND TO_DATE(:endDate,'YYYY-MM-DD') ; String
我的代码中有以下查询
static final String SQL = SELECT msgs.msg_submit_date MSG_DATE FROM {0}.messages msgs
WHERE TRUNC(msgs.msg_submit_date)
BETWEEN TO_DATE(:startDate,'YYYY-MM-DD') AND TO_DATE(:endDate,'YYYY-MM-DD') ;
String formattedSQL = MessageFormat.format(SQL , new Object[] "sms.schema"});
当我运行它时,我得到一个ORA-00904:“DD”:无效标识符错误。我假设这是因为msg\u submit\u date
列有与其关联的HH:MI:SS
,但是,我不想将HH:MI:SS
放在java代码中。有年、月、日就足够了
另外,当我在我的Oracle SQL Developer IDE中运行相同的查询时,它运行良好,没有任何错误,因此不确定发生了什么错误
使用以下格式通过java.time.LocalDate
生成日期:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/d/yyyy");
返回以下字符串格式2018-06-03
jdbc调用:
jdbcTemplate.query(formattedSQL, params, new MessagesRowMapper())
我认为这可能是由于MessageFormat
的原因,您可以将查询编写为:
SELECT msg_submit_date
FROM messages
WHERE submit_date >= DATE '2018-06-03' AND
submit_date < DATE '2018-06-13';
您可以将查询编写为:
SELECT msg_submit_date
FROM messages
WHERE submit_date >= DATE '2018-06-03' AND
submit_date < DATE '2018-06-13';
错误是因为执行查询时没有单引号;您可以通过以下方式获得相同的结果:
SELECT msgs.msg_submit_date MSG_DATE FROM messages msgs
WHERE TRUNC(msgs.msg_submit_date)
BETWEEN TO_DATE(:startDate,YYYY-MM-DD) AND TO_DATE(:endDate,YYYY-MM-DD);
ERROR at line 3:
ORA-00904: "DD": invalid identifier
日期格式组件被视为标识符,而不是字符串的一部分
您需要弄清楚为什么会发生这种情况——最可能的解释是,尽管您在问题中发布了什么,但Java代码中的静态字符串中没有这些内容,但它们可能会被稍后的转换(例如,MessageFormat.format())去掉
调用。错误是因为执行查询时没有单引号;您可以通过以下方式获得相同的结果:
SELECT msgs.msg_submit_date MSG_DATE FROM messages msgs
WHERE TRUNC(msgs.msg_submit_date)
BETWEEN TO_DATE(:startDate,YYYY-MM-DD) AND TO_DATE(:endDate,YYYY-MM-DD);
ERROR at line 3:
ORA-00904: "DD": invalid identifier
日期格式组件被视为标识符,而不是字符串的一部分
您需要弄清楚为什么会发生这种情况——最可能的解释是,尽管您在问题中发布了内容,但Java代码中的静态字符串中并没有它们,但它们可能会被稍后的转换(例如,MessageFormat.format()
调用)去除。显示您的Java代码。你的问题-不要在评论中发布代码或其他信息。@a_horse_,没有名字,我已经编辑了,单引号正在丢失;这就是它的真实外观,还是整个字符串都用双引号括起来?需要吗?(还有,为什么模式()的不匹配到日期()
模式;为什么传递字符串而不是直接绑定日期?Spring不允许吗?)那么格式化SQL呢?如何传递这些值?行映射器的代码在哪里?向我们展示您的Java代码。你的问题-不要在评论中发布代码或其他信息。@a_horse_,没有名字,我已经编辑了,单引号正在丢失;这就是它的真实外观,还是整个字符串都用双引号括起来?需要吗?(还有,为什么模式()的不匹配到日期()
模式;为什么传递字符串而不是直接绑定日期?Spring不允许吗?)那么格式化SQL呢?如何传递这些值?行映射器的代码在哪里。这是因为MessageFormat去掉了单引号。不知道为什么会这样,泰。这是因为MessageFormat去掉了单引号。不知道为什么会这样。