我想使用 Predicate notLike(Expression x, String pattern) 来替换以下查询:
select * from mytable
where mytable.myParameter not in ('ABC%','XYZ');
但是当我使用以下谓词执行查询时:
Predicate notLike = builder.notLike(fromMyTable.get(MyTable_.myParameter), "ABC%|BCD");
不工作。
但是如果我为两个字符串创建 2 个谓词:“ABC%”和“XYZ”就可以工作。
是我的模式写错了还是问题出在哪里?我尝试了很多方法来改变模式,但仍然不起作用。
谢谢!
最佳答案
在 SQL 中,“not in (X,Y,Z)”谓词是以下条件的快捷方式:
A <> X AND A <> Y AND A <> Z
此条件使用“不等于”运算符,比较操作数是否完全不相等。
不能使用 IN
或 NOT IN
运算符进行模式匹配。
您必须使用支持模式匹配的 LIKE
运算符重写查询:
select * from mytable
where mytable.myParameter not in ('XYZ')
and mytable.myParameter not LIKE 'ABC%';
或
select * from mytable
where mytable.myParameter <> 'XYZ'
and mytable.myParameter not LIKE 'ABC%';
关于oracle - JPA/标准 API - NotLike,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52353992/