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
(...) 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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With