sql >> データベース >  >> RDS >> Oracle

スペース区切り文字を使用して一般的な単語または文のn番目の文字列を取得する方法

    instrを使用する

    select substr(help, 1, instr(help,' ') - 1)
      from ( select 'hello my name is...' as help
               from dual )
    

    instr(help、'') 検索している文字列を含む、最初の引数の2番目の引数の最初の出現の位置インデックスを返します。つまり、''の最初の出現 文字列内'hellomy name is ...' プラス スペース。

    substr(help、1、instr(help、'')-1) 次に、最初の文字から instr(... )で示されるインデックスに入力文字列を取得します 。次に、スペースが含まれないように1つ削除します。

    n番目のオカレンスについては、これを少し変更してください:

    instr(help、''、1、n) nth ''の出現 最初の文字から。次に、次のインデックスの位置インデックスを見つける必要があります instr(help、''、1、n + 1) 、最後にそれらの違いを調べて、 substr(... nthを探しているとき 、 nの場合 は1です。これは故障し、次のように対処する必要があります。

    select substr( help
                 , decode( n
                         , 1, 1
                         , instr(help, ' ', 1, n - 1) + 1
                           )
                 , decode( &1
                         , 1, instr(help, ' ', 1, n ) - 1
                         , instr(help, ' ', 1, n) - instr(help, ' ', 1, n - 1) - 1
                           )
                   )
      from ( select 'hello my name is...' as help
               from dual )
    

    これもnで故障します 。ご覧のとおり、これはばかげているので、正規表現>

    select regexp_substr(help, '[^[:space:]]+', 1, n )
      from ( select 'hello my name is...' as help
               from dual )
    


    1. ORDERBYクエリで制限値に応じて異なるインデックスを使用するMySQL

    2. AWS AuroraRDSPostgresでユーザー定義関数を作成するにはどうすればよいですか

    3. ダブルクエリなしのMySQLページネーション?

    4. PDOとphp-非オブジェクトでのメンバー関数prepare()の呼び出し