2017-09-15 5 views
2

Oracleでは、2番目の単語を使用してSQL内でたとえばNameの値をソートするにはどうすればよいですか。私にはちょっとしたことがあります。例えば:テーブルの中に以下の名前がある場合:Oracle:SQLクエリの2番目の単語のリストをソートしますか?

私は名前に基づいてソートしたいオブジェクトのリストを持っています。私はそれが名前に基づいてソートされているコーディングを行っているが、私は少し異なる要件があります。

名は、例えば以下のとおりです。

Bull AMP 
Cat DEF 
Dog AMP 
Frog STR 
Zebra DEF 

私はリストになりたい:2番目の単語でソートする

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は、 '「))のみ2番目の単語を返し、あなたは、この第2の言葉で注文します。最初のものから2番目の単語まで注文したい場合は、次のようなことができます。

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; 

良く説明..

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従業員のためのSUBSTRによって(上段(DISPLAY_NAME)、INSTR(上段(DISPLAY_NAME)、」」、1));

0

クリーンアップREGEXP_REPLACEとすべてのことのネストされたINSTR/SUBSTRもの:

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

正規表現の一致とその最初で注文、その後、スペースの後に最後の「言葉」を覚えています。

関連する問題