sql >> Database >  >> RDS >> Oracle

Om de specifieke strings uit de gegeven string in Oracle te extraheren:

select 
  SUBSTR(s, 1, INSTR(s, '-') - 1) as a, 
  SUBSTR(s, INSTR(s, '-', -1) + 1) as b 
from 
  (select '[email protected]@BR12340000-990' as s from dual)

Met behulp van SUBSTR(string, start, length) we hebben de volgende argumenten:

Voor A:

  • de tekenreeks om te zoeken
  • 1 als de start en
  • (index_of_the_first_hyphen - 1) als de length . INSTR(string, searchfor) geeft ons de index van het eerste koppelteken

Voor B:

Met behulp van SUBSTR(string, start) we hebben argumenten:

  • de tekenreeks om te zoeken
  • de (index_of_last_hyphen + 1) - deze keer gebruiken we de extra INSTR(string, searchfor, startindex) argument startindex en stel het in op -1; dit zorgt ervoor dat het vanaf het einde van de string zoekt en achteruit werkt, waardoor we de index van het laatste koppelteken krijgen

We hebben geen lengteargument nodig - SUBSTR zonder lengte retourneert de rest van de string naar het einde

Het is belangrijk op te merken dat INSTR met een startindex van -1 achteruit zoekt, maar altijd de index vanaf het begin van de tekenreeks retourneert, niet het einde.

INSTR('dddde', 'd', -1)  
       12345            -- returns 4, because d is 4 from the start
       54321            -- it does not return 2, even though d is 2 from the "start" when searching backwards


  1. Hoe het kolomtype te veranderen van karaktervarierend naar geheel getal met behulp van sqlalchemy-migrate

  2. Een datum ontleden uit niet-opgemaakte tekst in SQL

  3. Probleem met toegang tot MySQL vanuit Java

  4. MySQL:u kunt de 'taken' van de doeltabel niet specificeren voor update in de FROM-clausule