【发布时间】:2016-10-15 08:12:54
【问题描述】:
我有一个问题
SELECT CAST(p.propertyId AS long) FROM Property p
WHERE p.propertyId IS NOT NULL
AND p.propertyId NOT LIKE '%-%'
AND p.propertyId NOT LIKE '%+%'
这很好用,因为 WHERE 条件成功地过滤掉了 propertyId 的所有非数字值。但是,如果我尝试使用强制转换 as 条件
SELECT p FROM Property p
WHERE p.propertyId IS NOT NULL
AND p.propertyId NOT LIKE '%-%'
AND p.propertyId NOT LIKE '%+%'
AND CAST(p.propertyId AS long) BETWEEN 999999 AND 10000000
它失败并出现错误java.sql.SQLException: ORA-01722: invalid number。
有没有办法强制最后一个条件只检查前三个通过?
【问题讨论】:
-
那么你得到了哪些应该显示的值,它们在演员表之前/之后是什么?
-
在第一个查询中,我得到了回报。如果我不施放它们,它们会以字符串的形式返回。在第二个查询中,我没有得到任何东西,因为它失败了。
-
您检查了生成的 SQL 吗?不是 JPQL 查询,而是它被翻译成的 SQL 查询导致了问题(提示:你得到一个 SQLException)。
-
您是否尝试使用括号来定义评估顺序?
-
它们都是 AND 条件。我会在哪里放括号来首先订购其中一些
标签: java sql hibernate jpa jpql