2016-12-09 28 views
1

各名前の2番目の単語をカラムに入れる必要があります。substrとinstrについての研究を行ったが、論理的なエラーがあると思う。 。SQLの文字列から2番目の単語を取得するOracle

select substr(vendor_name,instr(vendor_name, ' ')+1) from vendors ORDER BY vendor_id asc; 

Here is my current output, the code works, but it does not do what I want it to do.

+0

regexp_substrはsubstrとinstrよりもはるかに優れています – OscarAkaElvis

答えて

1

この文字列で検索してください:

SELECT SUBSTR(vendor_name, 
       INSTR(vendor_name, ' ', 1, 1) + 1, 
       INSTR(vendor_name, ' ', 1, 2) - INSTR(vendor_name, ' ', 1, 1) - 1) 
FROM vendors 
ORDER BY vendor_id 

これがどのように機能するかを確認するには、ここでは例Boeing Corporation Inc.vendor_nameを取る:

INSTR(vendor_name, ' ', 1, 1) = 7 = first occurrence of space 
INSTR(vendor_name, ' ', 1, 2) = 19 = second occurrence of space 

は今ここにあります部分文字列にする呼び出し:

私の答えは vendor_name(また、第一の空間)に存在する第二の領域があることを前提とし

SELECT SUBSTR('Boeing Corporation Inc.', 8, 11) = 'Corporation' 

注同じである

SELECT SUBSTR('Boeing Corporation Inc.', 
       7 + 1, 
       19 - 7 - 1) 

。この列に複雑なデータがある場合は、代わりに正規表現を使用することをお勧めします。

+0

大丈夫、うまくいきましたが、ありがとう、最後の部分は分かりません。 私は、文字列を取得する最初の部分は、次の単語で、スペースを削除する+1を理解します。 しかし、その後、私はステップインプットでステップを試してみると、それは私にこの[リンク](http://i.imgur.com/W66oy4N.png)を与える方法のように意味がありません。入力は次のとおりです: 'SELECT SUBSTR(vendor_name、INSTR(vendor_name、 '1、1)+ 1、INSTR(vendor_name、' '、1、2))FROMベンダーORDER BY vendor_id;' –

+0

Substr関数に3番目のパラメータを追加して、抽出する文字列の長さを制限します。 'INSTR(vendor_name、 ''、1、2) - INSTR(vendor_name、 ''、1、1) - 1は1番目と2番目のスペースの間の長さです。 –

+0

@AlexTonitoi例を追加してみましょう。何が起きているのかがわかります。 –

関連する問題