Oracle:选择以字符或相关特殊字符开头的单词

时间:2019-04-24 10:06:03

标签: java sql oracle select

我对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开头的单词。但这是一个法语项目,我还需要检索以“é”或“è”开头的单词。 这适用于所有可以与特殊字符关联的字母。

有人可以解决吗?

1 个答案:

答案 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)

但是我不确定第二种解决方案