最初,我面临一个奇怪的问题,下面的查询在Oracle SQL developer中运行良好。

select * from sbill.act_sub_t where (act_sub_t.unsub_dt - act_sub_t.sub_dt) < 100;

但我在java中遇到了以下问题Parameter value [100] did not match expected type[java.time.LocalDateTime (n/a)]
下面是java代码,
Query query1 = entityManager.createQuery("select * from ActSubT where (ActSubT.unsub_dt - ActSubT.sub_dt)<:days").setParameter("days", 100);

为了解决这个问题,我在java查询中使用了TO_DATE函数,并且能够在java中运行
select * from sbill.act_sub_t where (TO_DATE(ActSubT.unSubDt, 'DD-MM-YYYY') - TO_DATE(ActSubT.actualUnsubDt, 'DD-MM-YYYY')) < 100;

但实际问题是,我的应用程序同时支持Oracle和MySQL Db,而且MySQL中不支持TO_DATE函数,所以当这个应用程序在MySQL上运行时,这个查询将不会运行。
那么,我们是否有支持Oracle和MySQL的通用并行函数TO_DATE

最佳答案

似乎hibernate没有检查act_sub_t.unsub_dtact_sub_t.sub_dt是否属于DATE类型。
由于TO_DATE仅限Oracle,因此您可以使用数据库中常见的CAST-函数:

CAST(ActSubT.unsubDt AS date) - CAST(ActSubT.subDt AS date)


CAST(ActSubT.unsubDt - ActSubT.subDt AS int)

应该是个很好的替代品。

10-02 03:42