sql >> Databasteknik >  >> RDS >> Oracle

Hur man extraherar en delsträng från en sträng i Oracle/SQLite

Problem:

Du har en kolumn med strängar och du vill få delsträngar från dem.

Exempel 1:

I emails tabell, det finns en e-postkolumn. Du vill visa de första sju tecknen i varje e-postmeddelande.

Tabellen ser ut så här:

e-post
[email protected]
[email protected]
[email protected]
[email protected]

Lösning 1:

SELECT
  email,
  SUBSTR(email, 1, 7) AS substring
FROM emails;

Resultatet är:

e-post delsträng
[email protected] jake99@
[email protected] tamarab
[email protected] notine@
[email protected] jessica

Diskussion:

Använd en SUBSTR() fungera. Det första argumentet är strängen eller kolumnnamnet. Det andra argumentet är indexet för tecknet där delsträngen ska börja. Det tredje argumentet är längden på delsträngen.

Se upp! Till skillnad från vissa andra programmeringsspråk börjar indexen på 1 , inte 0. Det betyder att det första tecknet har index 1, det andra tecknet har index 2 osv.

>SUBSTR(email, 1, 7) kommer att returnera delsträngarna för värdena i e-postkolumnen som börjar med det första tecknet och går på sju tecken.

Exempel 2:

Du vill visa delsträngen mellan index 2 och 6 (inklusive).

Lösning 2:

SELECT
  email,
  SUBSTR(email, 2, 5) AS substring
FROM emails;

Resultatet är:

e-post delsträng
[email protected] ake99
[email protected] amara
[email protected] otine
[email protected] essic

Diskussion:

Du använder SUBSTR() fungerar precis som i föregående exempel. Den här gången är det andra argumentet för funktionen 2, eftersom vi vill börja på index 2. Längden på delsträngen är 5 (end_index - start_index + 1 ).

Exempel 3:

Du vill visa delsträngen som börjar med @-tecknet och slutar i slutet av strängen, men du vet inte de exakta indexen eller längderna.

Lösning 3:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) AS substring
FROM emails;

Resultatet är:

e-post delsträng
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Diskussion:

Du använder SUBSTR() fungerar precis som i de tidigare exemplen. Den här gången letar du efter en specifik karaktär vars position kan variera från rad till rad. För att hitta indexet för det specifika tecknet kan du använda INSTR(column, character) funktion, där kolumn är den bokstavliga strängen eller kolumnen som du vill hämta understrängen från, och tecknet är character där du vill starta delsträngen (här, @ ).

Det tredje argumentet för SUBSTR() funktion är längden på delsträngen. Du kan beräkna det med INSTR() och LENGTH() funktioner. Du gör detta genom att subtrahera indexet från kolumnlängden och sedan lägga till 1:

LENGTH(email) - INSTR(email, '@') + 1

Du kanske också vill hämta en delsträng som inte slutar i slutet av strängen utan på något specifikt tecken, t.ex. före '.' Så här gör du:

SELECT
  email,
  SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(email, '@')) AS substring
FROM emails;

Resultatet av denna fråga är:

e-post delsträng
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

Delen INSTR(email, '.') - INSTR(email, '@') beräknar helt enkelt längden på delsträngen.


  1. Använder MariaDB

  2. Oracle Before Insert OR Update Trigger Exempel

  3. MySQL, Sammanfoga två kolumner

  4. Vilka är de kända sätten att lagra en trädstruktur i en relationsdatabas?