Oracle DB Query Custom Order by - PullRequest
       30

Oracle DB Query Custom Order by

0 голосов
/ 01 февраля 2019

Я ищу способ выполнить что-то вроде нечеткого поиска с Oracle.Если на этот вопрос уже получен ответ, я с удовольствием приму ссылку, но я настолько новичок в Oracle, что даже не знаю, как быстро найти то, что хочу.

С учетом следующего запроса:

SELECT VEND_CUST_CD, LGL_NM, ALIAS_NM
FROM {{DB_NAME}}.{{DB_TABLE}}
WHERE ({{condition_1}}) AND ({{condition_2}}) AND (upper(LGL_NM) LIKE upper('%{{term}}%')
ORDER BY LGL_NM

Что я хотел бы получить в своем ответе, так это конкретный приказ.Давайте представим для этого term = ze.

Я бы хотел получить результаты, упорядоченные следующим образом:

  • Ze много Джонсон
  • Ze Бюстгальтер Eaters
  • Ze ro Гравитация
  • Ama ze d John
  • Бедаз зе л
  • Ла зе р Секс
  • За зе ш

Итак, сначала я возвращаюсь к словам, которые начинаются с term, за которым следует алфавитный список слов, которые содержат term.

Надеюсь, это понятно.

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете использовать union все так:

select * from (
SELECT VEND_CUST_CD, LGL_NM, ALIAS_NM
FROM {{DB_NAME}}.{{DB_TABLE}}
WHERE ({{condition_1}}) AND ({{condition_2}}) AND (upper(LGL_NM) LIKE upper('{{term}}%')

union all

SELECT VEND_CUST_CD, LGL_NM, ALIAS_NM
FROM {{DB_NAME}}.{{DB_TABLE}}
WHERE ({{condition_1}}) AND ({{condition_2}}) AND (upper(LGL_NM) LIKE upper('{{%term%}}') AND (upper(LGL_NM) not LIKE upper('{{term%}}')

) order by ...

или как @Salman A 's way

0 голосов
/ 01 февраля 2019

Полагаю, вы можете заказать результаты так:

ORDER BY CASE WHEN LGL_NM LIKE '{{term}}%' THEN 1 ELSE 2 END, LGL_NM
...