Oracle: выберите слова, которые начинаются с символа или соответствующего специального символа - PullRequest
3 голосов
/ 24 апреля 2019

Мне не очень легко с 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 Ответ

1 голос
/ 24 апреля 2019

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)

Но я не уверен насчет второго решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...