Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak uzyskać n-ty ciąg w dowolnym ogólnym słowie lub zdaniu ze spacją?

Używając instr .

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

instr(help,' ') zwraca indeks pozycyjny pierwszego wystąpienia drugiego argumentu w pierwszym, włącznie z szukanym ciągiem. tj. pierwsze wystąpienie ' ' w ciągu 'hello my name is...' plus przestrzeń.

substr(help, 1, instr(help,' ') - 1) następnie pobiera ciąg wejściowy od pierwszego znaku do indeksu wskazanego w instr(... . Następnie usuwam jeden, aby nie było miejsca.

Przy n-tym wystąpieniu po prostu zmień to nieznacznie:

instr(help,' ',1,n) jest n wystąpienie ' ' od pierwszego znaku. Następnie musisz znaleźć indeks pozycyjny następnego indeksu instr(help,' ',1,n + 1) , na koniec oblicz różnicę między nimi, abyś wiedział, jak daleko zajść w swoim substr(... . Gdy szukasz n , kiedy n to 1 to się psuje i musisz sobie z tym poradzić, tak:

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 )

To również ulegnie awarii o n . Jak widać, robi się to niedorzeczne, więc warto rozważyć użycie regular expressions

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Semantyka CHAR i ORA-01461

  2. Używanie Dappera z Oracle

  3. Ważna data sprawdzania w Oracle

  4. Określone rzutowanie nie jest prawidłowe podczas wypełniania DataTable z OracleDataAdapter.Fill()

  5. Najlepsza nie zerowa kolumna