Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pour extraire les chaînes spécifiques de la chaîne donnée dans 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)

Utilisation de SUBSTR(string, start, length) nous avons les arguments suivants :

Pour A :

  • la chaîne à rechercher
  • 1 comme start et
  • (index_of_the_first_hyphen - 1) comme length . INSTR(string, searchfor) nous donne l'indice du premier trait d'union

Pour B :

Utilisation de SUBSTR(string, start) nous avons des arguments :

  • la chaîne à rechercher
  • le (index_of_last_hyphen + 1) - cette fois, nous utilisons le supplément INSTR(string, searchfor, startindex) argument startindex et réglez-le sur -1 ; cela le fait rechercher à partir de la fin de la chaîne et travailler vers l'arrière, nous donnant l'index du dernier trait d'union

Nous n'avons pas besoin d'argument de longueur - SUBSTR sans longueur renvoie le reste de la chaîne jusqu'à la fin

Il est important de noter que INSTR avec un index de départ de -1 effectue une recherche vers l'arrière, mais il renvoie toujours l'index à partir du début de la chaîne, pas de la fin.

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