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

At udtrække de specifikke strenge fra den givne streng i Oracle

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)

Brug af SUBSTR(string, start, length) vi har følgende argumenter:

For A:

  • strengen til at søge
  • 1 som start og
  • (indeks_af_den_første_bindestreg - 1) som length . INSTR(string, searchfor) giver os indekset for den første bindestreg

For B:

Brug af SUBSTR(string, start) vi har argumenter:

  • strengen til at søge
  • (indeks_af_sidste_bindestreg + 1) - denne gang bruger vi den ekstra INSTR(string, searchfor, startindex) argument startindex og sæt den til -1; dette får den til at søge fra slutningen af ​​strengen og arbejde baglæns, hvilket giver os indekset for den sidste bindestreg

Vi behøver ikke et længdeargument - SUBSTR uden længde returnerer resten af ​​strengen til slutningen

Det er vigtigt at bemærke, at INSTR med et startindeks på -1 søger baglæns, men det returnerer altid indekset fra begyndelsen af ​​strengen, ikke slutningen.

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. Hvor lang tid skal det tage at bygge et indeks ved hjælp af ALTER TABLE i MySQL?

  2. Kompilere pg_repack-udvidelse på binært format af PostgreSQL-installation

  3. Laravel veltalende - Er der en måde at tilføje et tip før SELECT?

  4. Problemer med seriel datatype i DBeaver &PostgreSQL