2017-09-15 171 views
2

在Oracle中,我如何使用SQL的第二個字爲SQL中的例如:Name排序值。看起來有點棘手。例如:如果在一個表中,我的名字如下:Oracle:對SQL查詢中的第二個單詞排序列表?

我有一個對象列表,我想根據名稱進行排序。我已經完成了基於名稱排序的編碼,但我有一個不同的要求。

的名稱,例如:

Bull AMP 
Cat DEF 
Dog AMP 
Frog STR 
Zebra DEF 

我想要的清單是:

Bull AMP 
Dog AMP 
Cat DEF 
Zebra DEF 
Frog STR 

要通過第二個字進行排序。

我試過下面的查詢,但它似乎沒有工作。

SELECT NAME, 
    SUBSTR(NAME, INSTR(' ',NAME), 
    LENGTH(NAME) - INSTR(' ',NAME) +2) AS word2 
FROM animal_master 
ORDER BY SUBSTR(NAME,INSTR(' ',NAME), LENGTH(NAME) - INSTR(' ',NAME) +2) asc; 

任何人都可以請指導什麼是錯的。

回答

2

您的INSTR函數有回到前面的參數,所以這就是爲什麼你得到不正確的結果。我會建議使用下列內容:

SELECT NAME 
FROM animal_master 
ORDER BY SUBSTR(NAME,INSTR(NAME, ' ')) asc; 

的SUBSTR(NAME,INSTR(NAME,'「))只返回第二個字,你的第二個字訂購。如果您還想按第一個順序排列,則可以使用第二個詞來執行下列操作:

ORDER BY SUBSTR(NAME,INSTR(NAME, ' ')), NAME 
+0

這個答案好多了。但是,要刪除第一個空格,我們將使用trim,所以,ORDER BY SUBSTR(NAME,INSTR(NAME,''))asc;會做的伎倆。 – Damith

0

請嘗試以下操作。

SELECT NAME 
FROM animal_master 
ORDER BY TRIM(SUBSTR(NAME, (INSTR(NAME, ' ', 1, 1) + 1), (INSTR(NAME, ' ', 1, 2) - INSTR(NAME, ' ', 1, 1) - 1))) asc; 

下面查詢解釋更好..從僱員爲了通過SUBSTR

SELECT NAME 
    FROM (
     SELECT 
      NAME, 
      (INSTR(NAME, ' ', 1, 1) + 1) first_occurrence_of_space, 
      (INSTR(NAME, ' ', 1, 2) - INSTR(NAME, ' ', 1, 1) - 1) second_occurrence_of_space 
    FROM animal_master) 
ORDER BY TRIM(SUBSTR(NAME, first_occurrence_of_space, second_occurrence_of_space)) asc; 
0

選擇DISPLAY_NAME(上部(DISPLAY_NAME),INSTR(上(DISPLAY_NAME),」」,1));

0

清理所有嵌套INSTR/SUBSTR東西與REGEXP_REPLACE:

order by regexp_replace(NAME, '.* (\w)', '\1'), NAME; 

正則表達式匹配並記住的空間後最後一個「字」,然後由第一筆訂單。

相關問題