0

我正在使用 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 ide 中复制这句话,它运行得很好,我有两个数据库,一个用于测试,一个用于生产,生产标记了这个错误,而在测试中没有。

我也想知道,什么比较好??将日期包含在字符串中,然后像这样将其传递给 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());

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

这可能是错误的原因?

非常感谢。

4

2 回答 2

1

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

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

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

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

于 2015-01-13T03:03:54.270 回答
0
trunc    (fh_report) = '09 / 01/2015 '

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

我想如果您将 = 文本更改为

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

它应该工作。

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

于 2015-01-13T02:07:32.207 回答