我对Oracle不太满意。我的项目使用Java 8,Springboot,JpaRepository和Oracle DB。我在存储库中有此查询:
@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);
当我有“ E”字母时,我会很好地检索以E开头的单词。但这是一个法语项目,我还需要检索以“é”或“è”开头的单词。 这适用于所有可以与特殊字符关联的字母。
有人可以解决吗?
答案 0 :(得分:1)
1)修改nls_sort和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
现在您的查询对重音不区分大小写了
SELECT lex FROM Lexique lex WHERE lex.titre LIKE :lettre||'%'
但是更改这些参数将影响其他查询。
2)使用nlssort
。Nlssort返回RAW类型,不可能与like子句一起使用,但是您可以执行此解决方法。
@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)
但是我不确定第二种解决方案