我有下面的本地查询,我想转义下划线(_),所以它不会作为一个像搜索文字
PS:这只是查询的一部分,没有全部完成
@RestResource(path = "findLatestEmployeeByNameExactMatch", rel = "findLatestEmployeeByNameExactMatch")
@Query(value = "select e from Employee e " +
" WHERE :name IS NULL OR upper(e.name) LIKE upper(:name) " +
" AND e.latestProject = (select MAX(an.latestProject) from Employee an where upper(an.name) = upper(a.name))")
Employee findEmployeeByName(@Param("name") String name);
字符串
员工表
name latest_project
John_X 123
John_X 124
John-X 123
John-X 124
型
当前API在搜索John_X
时返回两条记录John_X 124
和John-X 124
,因为_
被认为是文字。我想转义下划线,只返回John_X 124
我该怎么做?
1条答案
按热度按时间y53ybaqx1#
LIKE
查询不会将左侧解释为LIKE
表达式。只有LIKE
查询的右侧会被这样解释。因此,您需要更改:name
部分,这可以使用default
方法轻松完成:字符串
然后,您可以正常使用
findEmployeeByName
,它将使用正确的参数调用findEmployeeByNameEscaped
。更新
因为你不需要(也不想要)
LIKE
的特性,你应该使用=
:型
(我在这里使用旧版本的SQL语句,因为我不觉得新版本是有效的,因为
SELECT ... WHERE ... FROM ...
)这样,您就不需要转义
_
,因为它将直接比较字符串而不是匹配。