我的查询是这样的:
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日期选择器中获取
startDate
和endDate
。 date
是系统日期,我得到的是这样的: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/