【问题标题】:Date format returning ORA-00904 in java code but not in sql developer日期格式在 java 代码中返回 ORA-00904 但在 sql developer 中不返回
【发布时间】:2018-12-21 00:55:57
【问题描述】:

我正在使用 spring JDBCTemplate 来查询我的数据。


我的代码中有以下查询

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": invalid identifier 错误。我假设这是因为msg_submit_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

【问题讨论】:

  • 向我们展示您的 Java 代码。 Edit 您的问题 - 请不要在 cmets 中提供邮政编码或其他信息。
  • @a_horse_with_no_name 我已经进行了编辑
  • 单引号丢失;这真的是它看起来的样子,还是整个字符串都用双引号括起来?有必要吗? (另外,为什么你的 ofPattern() 不匹配 to_date() 模式;为什么你传递字符串而不是直接绑定日期 - Spring 不允许这样做吗?)
  • formattedSQL 怎么样?你如何传递价值观?行映射器的代码在哪里?

标签: java sql oracle oracle-sqldeveloper


【解决方案1】:

该错误是因为执行时查询没有单引号;你可以得到同样的东西:

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() 调用。

【讨论】:

  • 泰。这是由于 MessageFormat 去掉了单引号。不知道为什么会这样。
【解决方案2】:

您可以将查询编写为:

SELECT msg_submit_date
FROM messages
WHERE submit_date >= DATE '2018-06-03' AND
      submit_date < DATE '2018-06-13';

那么您无需担心该值的任何潜在时间分量。

也就是说,您的问题似乎在于将数据移动到您的应用程序。也许这会有所帮助:

SELECT TRUNC(msg_submit_date)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多