首页 > 解决方案 > Mysql 中的 Oracle TO_DATE 函数并行,应该同时支持 DB oracle 和 mysql

问题描述

最初,我遇到了一个奇怪的问题,下面的查询在 Oracle SQL 开发人员中运行良好。

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);

所以为了解决这个问题,我TO_DATE在我的 java 查询中使用了函数,并且我能够在 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,并且该TO_DATE功能在 MYSQL 中不支持,因此当此应用程序在 MySQL 上运行时,此查询将不会运行。

那么我们有什么通用的并行函数TO_DATE同时支持 Oracle 和 MySQL 吗?

标签: javamysqloraclehibernatecreatequery

解决方案


似乎 hibernate 不检查它act_sub_t.unsub_dt并且act_sub_t.sub_dt是 type DATE

TO_DATE仅 Oracle 一样,您可以使用CAST数据库中常见的 -function:

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

或者

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

应该是很好的替代品。


推荐阅读