sql >> Database teknologi >  >> RDS >> Oracle

Sådan får du den n'te streng i et hvilket som helst generisk ord eller sætning med et mellemrum

Ved at bruge instr .

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

instr(help,' ') returnerer positionsindekset for den første forekomst af det andet argument i det første, inklusive den streng, du søger efter. dvs. den første forekomst af ' ' i strengen 'hello my name is...' plus pladsen.

substr(help, 1, instr(help,' ') - 1) tager derefter inputstrengen fra det første tegn til indekset angivet i instr(... . Jeg fjerner så en, så pladsen ikke er med..

For den n'te forekomst skal du bare ændre dette lidt:

instr(help,' ',1,n) er den n. forekomst af ' ' fra det første tegn. Du skal derefter finde positionsindekset for det næste indeks instr(help,' ',1,n + 1) , find endelig forskellen på dem, så du ved, hvor langt du skal gå i din substr(... . Mens du leder efter den n. , når n er 1 går det i stykker, og du skal håndtere det, sådan:

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 )

Dette vil også nedbrydes ved n . Som du kan se, bliver dette latterligt, så du bør overveje at bruge regular expressions

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


  1. Valg af tilfældige ord fra tabellen

  2. Få forskellige på hinanden følgende datointervaller fra overlappende datointervaller

  3. Hvordan kan jeg bruge funktion i min mysql-forespørgsel?

  4. forespørgsel efter et sæt i en relationsdatabase