Reputation: 7765
In a J2EE project, using JPA, how can I force a like query to be case insensitive and accent insensitive?
I know about changing session variables NLS_COMP and NLS_SORT but I'm wondering if there is another trick to do this in the query itself, without changing session variables
Upvotes: 10
Views: 16618
Reputation: 13496
You could use NLS_UPPER for that without altering the session:
select 1
from dual
where nls_upper('große', 'NLS_SORT = XGerman') like '%OSSE%';
Upvotes: -1
Reputation: 570325
(...) using JPA, how can I force a like query to be case insensitive and accent insensitive?
My answer will be JPQL oriented. For the former part, you could do:
where lower(name) like 'johny%';
For the later part, I'm not aware of a standard JPQL way to do it.
At the end, altering the session variables NLS_COMP
and NLS_SORT
is IMO the best option.
Upvotes: 8
Reputation: 35401
Crudely, you can do something like
select upper(convert('This is a têst','US7ASCII')),
upper(convert('THIS is A test','US7ASCII'))
from dual;
select 1 from dual
where upper(convert('This is a têst','US7ASCII')) =
upper(convert('THIS is A test','US7ASCII'))
The CONVERT reduces the accented characters to the mapped ASCII equivalent, and the UPPER forces lower case to uppercase. The resultant strings should be matchable.
Upvotes: 4