sql >> Databáze >  >> RDS >> Oracle

Jak získat n-tý řetězec v jakémkoli obecném slově nebo větě s oddělovačem mezery

Pomocí instr .

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

instr(help,' ') vrátí poziční index prvního výskytu druhého argumentu v prvním, včetně řetězce, který hledáte. tj. první výskyt ' ' v řetězci 'hello my name is...' plus prostor.

substr(help, 1, instr(help,' ') - 1) poté převezme vstupní řetězec od prvního znaku po index uvedený v instr(... . Pak jeden odstraním, aby místo nebylo zahrnuto..

Pro n-tý výskyt to jen mírně změňte:

instr(help,' ',1,n) je n-tý výskyt ' ' od prvního znaku. Potom musíte najít poziční index dalšího indexu instr(help,' ',1,n + 1) , nakonec zjistěte rozdíl mezi nimi, abyste věděli, jak daleko zajít v substr(... . Když hledáte n-té , když n je 1, tohle se porouchá a musíte se s tím vypořádat, takhle:

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 se také porouchá v n . Jak vidíte, začíná to být směšné, takže možná budete chtít zvážit použití regular expressions

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


  1. Volání uložené procedury s parametrem v c#

  2. Rozdíl mezi notací Oracle plus (+) a notací ansi JOIN?

  3. získat data z mysql s ajaxem a json do různých textových oblastí

  4. Jak získat index jiné kategorie vrácený objednávkou pomocí SQL v oracle?