Oracle中實現查詢結果按照in中條件排序 InStr函式

lingxyd_0發表於2011-12-03

 

Oracle中,可以使用 Instr 函式對某個字串進行判斷,判斷其是否含有指定的字元。

其語法為:
Instr(string, substring, position, occurrence)
其中

string:代表源字串;

substring:代表想從源字串中查詢的子串;

position:代表查詢的開始位置,該引數可選的,預設為 1;預設查詢順序為從左到右。當起始位置為負數的時候,從右邊開始查詢。

occurrence:代表想從源字元中查詢出第幾次出現的substring,該引數也是可選的,預設為1;
如果 position 的值為負數,那麼代表從右往左進行查詢。
返回值為:查詢到的字串的位置。

對於 Instr 函式,我們經常這樣使用:從一個字串中查詢指定子串的位置。

例如:

SELECT Instr('Hello Word', 'o', -1, 1) "String" FROM Dual 的顯示結果是

Instring
————
8

 

 

INSTR方法的格式為:
        INSTR(源字串, 目標字串, 起始位置, 匹配序號)

例如:

        INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字串為'CORPORATE FLOOR', 目標字串為'OR',起始位置為3,取第2個匹配項的位置。

預設查詢順序為從左到右。當起始位置為負數的時候,從右邊開始查詢。

所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL的顯示結果是

Instring
——————
14

特殊用法:

        特殊用法說到底也沒有什麼特別,我們上面看到的“源字串”、“目標字串”都是寫死的,其實它也可以為欄位,看下面的例子:

        select   id, name from users where instr('101914, 104703', id) > 0;

        它等價於

         select   id, name from users where id = 101914 or id = 104703;

用途:

         採用instr在原因是我在前臺連續錄入多個人員的id,想返回這些人員的資料。舉個例子:“王武,男,計算機系學生;曉亮,男,藝術系學生。”

         前臺,接收輸入的id,用","分開,在後臺我不想再對它做分開來處理,就可以使用instr語句,然後再用for loop連線得到的結果。

        還有一個,可能不怎麼常用:

         select   id, name from users where instr(id, '101') > 0; 

         等價於

          select   id, name from users where id like '%101%'

          對於這樣使用instr的效能怎樣,還沒有做過同比測試。

排序:
select a.resattributeid,a.attributeenname,b.resattributeid,a.resclassenname from m_resattribute a,m_resattribute_jsrmw_bak b
where a.resclassenname=b.resclassenname and a.attributeenname=b.attributeenname
and b.resattributeid in (155977,172505,155967,155952,155951,278943,155976,155963,227385,172503,279664)
order by instr('155977,172505,155967,155952,155951,278943,155976,155963,227385,172503,279664',b.resattributeid)     

 

 

 

 

相關文章