Oracle DB查询定制顺序

时间:2019-02-01 17:49:34

标签: sql oracle select sql-order-by sql-like

我正在寻找一种完成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 alot Johnson
  • Ze 食蛇者
  • Ze ro重力
  • Ama ze d John
  • Bedaz ze l
  • La ze r性爱
  • Za ze w

因此,我首先回想的是以term开头的单词,然后是其中包含term的单词的字母顺序列表。

我希望这很清楚。

2 个答案:

答案 0 :(得分:5)

我想您可以像这样订购结果:

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

答案 1 :(得分:0)

您可以像这样使用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的方式一样