No estoy muy a gusto con Oracle. Mi proyecto utiliza Java 8, Springboot, JpaRepository y una base de datos Oracle. Tengo esta consulta en mi repositorio:
@Query("SELECT lex FROM Lexique lex WHERE UPPER(lex.titre) LIKE UPPER(CONCAT(:lettre,'%')) order by lex.titre ASC ")
List<Lexique> findAllWordsStartingBy(@Param("lettre") String lettre);
Cuando tengo la "E" carta, así recuperar las palabras que comienzan con E. Pero es un proyecto francés y también necesitará para recuperar las palabras que empiezan con "E" o "e". Y esto para todas las letras que se pueden asociar a los caracteres especiales.
Alguien tiene una solución ?
1) Modificar NLS_SORT, y nls_comp
alter session set nls_sort=french_m_ai; --(_m -> multilingual , _ai -> accent insensitive and case insensitive )
alter session set nls_comp=linguistic; -- comparisions base on linguistic rule
Ahora la consulta es insensible acento y sensible a mayúsculas
SELECT lex FROM Lexique lex WHERE lex.titre LIKE :lettre||'%'
Pero el cambio de éstos parámetro afectará a otras consultas.
2) Uso nlssort
.Nlssort está volviendo tipo RAW y no es posible utilizarlo como con la cláusula pero se puede hacer esta solución.
@Query("SELECT lex FROM Lexique lex WHERE nlssort(substr(lex.titre,1,1), 'NLS_SORT=FRENCH_M_AI') = nlssort(:letter, 'NLS_SORT=FRENCH_M_AI') ", nativeQuery = true)
Pero no estoy seguro acerca de la segunda solución