我有 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 应用程序中执行此操作?
我找到了处理方法。它接受以下内容:
@Query(
value = "SELECT MAX(CONVERT('TIMESTAMP', \"inv-date\") + (\"inv-time\" * 1000)) " +
"rest of query...",
nativeQuery = true
)
Optional<Date> findLastPaymentInvoiceDate(Long aAccountId);
因此,虽然我不知道为什么
odbc_convert
命令不起作用,但这个 convert
命令确实有效。