sql >> Databasteknik >  >> RDS >> Oracle

För att extrahera de specifika strängarna från den givna strängen 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)

Använda SUBSTR(string, start, length) vi har följande argument:

För A:

  • strängen att söka på
  • 1 som start och
  • (index_of_the_first_hyphen - 1) som length . INSTR(string, searchfor) ger oss indexet för det första bindestrecket

För B:

Använda SUBSTR(string, start) vi har argument:

  • strängen att söka på
  • (index_of_last_hyphen + 1) - den här gången använder vi den extra INSTR(string, searchfor, startindex) argument startindex och ställ in den på -1; detta gör att den söker från slutet av strängen och arbetar bakåt, vilket ger oss indexet för det sista bindestrecket

Vi behöver inget längdargument - SUBSTR utan längd returnerar resten av strängen till slutet

Det är viktigt att notera att INSTR med ett startindex på -1 söker bakåt men det returnerar alltid indexet från början av strängen, inte slutet.

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. Kontrollera vilka användare som är online

  2. Hur vi kan hitta domännamn med MySQL och reguljära uttryck

  3. Hur man delar sträng och infogar värden i tabell i SQL Server

  4. Problem med MYSQL specialtecken