sql >> Database >  >> RDS >> Oracle

Hoe de n-de tekenreeks in een generiek woord of zin met een spatiescheidingsteken te krijgen?

Door instr te gebruiken .

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

instr(help,' ') retourneert de positionele index van het eerste voorkomen van het tweede argument in het eerste, inclusief de tekenreeks waarnaar u zoekt. d.w.z. de eerste keer dat ' ' . voorkomt in de string 'hallo mijn naam is...' plus de ruimte.

substr(help, 1, instr(help,' ') - 1) neemt vervolgens de invoerreeks van het eerste teken naar de index die is aangegeven in instr(... . Ik verwijder er dan een zodat de spatie niet wordt opgenomen..

Wijzig dit voor de zoveelste keer iets:

instr(help,' ',1,n) is de nde voorkomen van ' ' vanaf het eerste teken. Je moet dan de positionele index van de volgende index vinden instr(help,' ',1,n + 1) , bereken ten slotte het verschil tussen beide, zodat u weet hoe ver u moet gaan in uw substr(... . Terwijl u op zoek bent naar de nth , wanneer n is 1 dit gaat kapot en je hebt er mee te maken, zoals zo:

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 )

Dit wordt ook afgebroken bij n . Zoals je kunt zien begint dit belachelijk te worden, dus je zou kunnen overwegen om reguliere expressies

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


  1. Is het conceptueel juist om een ​​SELECT MAX (id) enz. te doen om de laatst ingevoegde rij te vinden?

  2. .NET MySqlCommand @ placeholder conflicteert met MySQL-variabele

  3. Nog een reden om NOEXPAND-hints te gebruiken in Enterprise Edition

  4. Hoe gebruik ik een subquery voor dbtable-optie in de jdbc-gegevensbron?