如何在 OpenEdge/Progress 数据库中使用 JpaRepository 将日期转换为日期时间

问题描述 投票:0回答:1

我有 2 个字段组成进度数据库中的日期和时间。一种是日期类型,

"inv-date"
,另一种是整数,
"inv-time"
。我想在我的 Java 应用程序中的特定查询中获取最大日期和时间。

我能够在 DBeaver 中执行此查询:

SELECT MAX({ fn CONVERT("inv-date", SQL_TIMESTAMP) } + ("inv-time" * 1000))
FROM   pub."inv"
WHERE  "acct-id" = 120324 AND "inv-type" IN (1, 2)

它将返回一个添加了时间的日期。当我执行它时,我发现它实际上是这样做的:

SELECT MAX(odbc_convert("inv-date", SQL_TIMESTAMP) + ("inv-time" * 1000))

我尝试在我的 Java 界面上的

@Query
中使用这两个,如下所示:

public interface InvoiceRepository extends JpaRepository<Invoice, Long> {

@Query(
   value = "SELECT MAX({ fn CONVERT(\"inv-date\", SQL_TIMESTAMP) } + (\"inv-time\" * 1000)) " +
   " FROM   pub.\"inv\" " +
   " WHERE  \"acct-id\" = ?1 AND \"inv-type\" IN (1, 2)",
   nativeQuery = true
)
Optional<Date> getLastPaymentInvoiceDate(Long aAccountId);
// also tried just getting Object
}

运行此查询时出错,无法提取结果集。我也尝试过使用

SELECT MAX(odbc_convert(\"inv-date\", SQL_TIMESTAMP) + (\"inv-time\") * 1000))

@Query
中,给出了相同的错误。

如何将日期转换为日期时间,以便我可以在 Java 应用程序中执行此操作?

spring-data-jpa odbc openedge progress-db jparepository
1个回答
0
投票

我找到了处理方法。它接受以下内容:

@Query(
   value = "SELECT MAX(CONVERT('TIMESTAMP', \"inv-date\") + (\"inv-time\" * 1000)) " +
   "rest of query...",
   nativeQuery = true
)
Optional<Date> findLastPaymentInvoiceDate(Long aAccountId);

因此,虽然我不知道为什么

odbc_convert
命令不起作用,但这个
convert
命令确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.