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

Sådan udtrækkes en understreng fra en streng i Oracle/SQLite

Problem:

Du har en kolonne med strenge, og du vil gerne have understrenge fra dem.

Eksempel 1:

I emails tabel, er der en e-mail-kolonne. Du vil gerne vise de første syv tegn i hver e-mail.

Tabellen ser således ud:

e-mail
[email protected]
[email protected]
[email protected]
[email protected]

Løsning 1:

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

Resultatet er:

e-mail understreng
[email protected] jake99@
[email protected] tamarab
[email protected] notine@
[email protected] jessica

Diskussion:

Brug en SUBSTR() fungere. Det første argument er strengen eller kolonnenavnet. Det andet argument er indekset for det tegn, hvor understrengen skal begynde. Det tredje argument er længden af ​​understrengen.

Pas på! I modsætning til nogle andre programmeringssprog starter indeksene ved 1 , ikke 0. Det betyder, at det første tegn har indeks 1, det andet tegn har indeks 2 osv.

>SUBSTR(email, 1, 7) returnerer understrengene af værdierne i e-mail-kolonnen, der starter ved det første tegn og går til syv tegn.

Eksempel 2:

Du vil gerne vise understrengen mellem indeks 2 og 6 (inklusive).

Løsning 2:

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

Resultatet er:

e-mail understreng
[email protected] ake99
[email protected] amara
[email protected] otine
[email protected] essens

Diskussion:

Du bruger SUBSTR() fungerer ligesom i det foregående eksempel. Denne gang er det andet argument for funktionen 2, da vi ønsker at starte ved indeks 2. Længden af ​​understrengen er 5 (end_index - start_index + 1 ).

Eksempel 3:

Du vil gerne vise understrengen, der starter ved @-tegnet og slutter i slutningen af ​​strengen, men du kender ikke de nøjagtige indekser eller længder.

Løsning 3:

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

Resultatet er:

e-mail understreng
[email protected] @gmail.com
[email protected] @zoho.com
[email protected] @yahoo.fr
[email protected] @onet.pl

Diskussion:

Du bruger SUBSTR() fungerer ligesom i de foregående eksempler. Denne gang leder du efter en bestemt karakter, hvis position kan variere fra række til række. For at finde indekset for det specifikke tegn, kan du bruge INSTR(column, character) funktion, hvor kolonne er den bogstavelige streng eller kolonnen, hvorfra du vil hente understrengen, og tegnet er character hvor du vil starte understrengen (her @ ).

Det tredje argument i SUBSTR() funktion er længden af ​​understrengen. Du kan beregne det ved hjælp af INSTR() og LENGTH() funktioner. Det gør du ved at trække indekset fra kolonnelængden og derefter tilføje 1:

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

Du ønsker måske også at hente en understreng, der ikke slutter i slutningen af ​​strengen, men med et bestemt tegn, f.eks. før '.' Sådan kan du gøre dette:

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

Resultatet af denne forespørgsel er:

e-mail understreng
[email protected] @gmail
[email protected] @zoho
[email protected] @yahoo
[email protected] @onet

Delen INSTR(email, '.') - INSTR(email, '@') beregner blot længden af ​​understrengen.


  1. Nye Oracle-kompatibilitetsfunktioner i PostgresPlus Advanced Server 9.3Beta

  2. SQL Server - transaktioner ruller tilbage ved fejl?

  3. SQL-server-identitetskolonneværdier starter ved 0 i stedet for 1

  4. Sådan grupperes efter år i T-SQL