2010-11-18 22 views

Respuesta

4

crudamente, se puede hacer algo como

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')) 

El CONVERTIR reduce los caracteres acentuados al equivalente ASCII asignado, y el UPPER fuerza la letra minúscula a mayúscula. Las cadenas resultantes deben ser compatibles.

+0

Este no es compatible con la APP (sin el apoyo de conversión) pero va a trabajar usando Hibernate/Oracle, así que estoy aceptando esta respuesta ... espero que no sea injusto :) – AlfaTeK

+0

'injusto' o ¿no? =) Usted solicitó una respuesta utilizando JPA y aceptó una que no es compatible con JPA. –

8

(...) utilizando JPA, ¿cómo puedo forzar una consulta similar para que sea insensible a las mayúsculas y minúsculas y no acentúe?

Mi respuesta estará orientada a JPQL. Para la primera parte, se podría hacer:

where lower(name) like 'johny%'; 

Para la parte posterior, no estoy al tanto de una manera JPQL estándar para hacerlo.

Al final, la alteración de las variables de sesión NLS_COMP y NLS_SORT es IMO la mejor opción.

-1

Se podría utilizar para NLS_UPPER que sin alterar la sesión:

select 1 
from dual 
where nls_upper('große', 'NLS_SORT = XGerman') like '%OSSE%'; 

NLS_UPPER documentation

+0

Eso no resuelve el problema insensible a los acentos. SELECCIONAR NLS_UPPER ('áçgroe', 'NLS_SORT = XWEST_EUROPEAN_AI') "Mayúsculas" DESDE DOBLE; // devuelve ÁÇGROE que todavía tiene acentos – AlfaTeK

+0

No busqué en todos los valores posibles del parámetro NLS_SORT. Supongo que debería haber uno que elimine los acentos. Veré si puedo agregar algo útil después de mi fin de semana. –

Cuestiones relacionadas