我的查询是这样的:

where (:startDate is null or :endDate is null or DDATE between :startDate AND :endDate)
AND (:startDate is null or (:endDate is not null or DDATE between :startDate AND :date))

我从ajax日期选择器中获取startDateendDatedate是系统日期,我得到的是这样的:
Date utiDate = new Date();

当我执行查询时,出现错误:

java.sql.SQLException: ORA-00932: inconsistent datatypes: expected DATE got BINARY

最佳答案

为了找到正确的答案,我发现了一个有趣的帖子here

如果:endDate为null,则不能确定不会评估条件DDATE between :startDate AND :endDate。而且,如果对其进行了评估,Oracle会尝试将空值转换为日期,因此会给您一个错误。

尝试测试删除DDATE between :startDate AND :endDate部分的查询:您应该不再有该错误。然后,您必须修改查询以确保如果between为null,则不会对:enddate运算符进行评估。在this post中,他们建议在CASE子句中使用WHERE语句。也许它可以解决您的问题。

关于短路评估和Oracle数据库,我发现that question可以帮助您理解问题。

关于java - ORA-00932 : inconsistent datatypes: expected DATE got BINARY in Hibernate,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16582611/

10-12 02:51