ORA-01843:不是有效月份JPA

时间:2015-01-13 00:58:17

标签: java oracle jpa ora-01843

我正在使用JPA 1并且有一个执行以下语句的本机查询:

select NVL (max (x.some), 0) from (select count (1) as some, service from some_table Where trunc    (fh_report) = '09 / 01/2015 'group by service) x

标记错误是:

  

java.sql.SQLDataException:ORA-01843:不是有效月份

但是,如果我复制ORACLE中的句子,这完全运行,我有两个数据库,一个用于测试,一个用于生产,生产标记了这个错误,并且在测试中没有。

我也想知道,什么更好?将日期包含在字符串中,然后将其传递给jpa,就像这样?

String sql = "select NVL (max (x.some), 0) from (select count (1) as some, service from some_table Where trunc    (fh_report) = '09 / 01/2015 'group by service) x ";

Query query = em.createNativeQuery(sql.toString());

或将日期值作为参数传递?

这可能是错误的原因?

非常感谢。

2 个答案:

答案 0 :(得分:1)

隐式日期转换可能取决于您的客户端和服务器设置。相同的代码通常在一个环境中运行,而不是在另一个环境中运行。

一种解决方案是使用ISO 8601格式的ANSI日期文字:

trunc(fh_report) = date '2015-09-01'

我猜测原始代码使用美国日期格式。 ISO 8601的优点是没有人或计算机需要猜测,这是明确的。

答案 1 :(得分:0)

trunc    (fh_report) = '09 / 01/2015 '

如果您要去TRUNC()日期,结果值应为documentation中指定的“DD-MON-YYYY”。

我想如果你把你的=文本改为

trunc    (fh_report) = '01-SEP-15'

它应该有用。

但是,我很困惑,你说它在IDE中有效。除非你有不同的数据库或版本,否则我无法想象它是否有效。