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

Sådan udtrækkes en understreng fra en streng i T-SQL

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,
  SUBSTRING(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 SUBSTRING() 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.

SUBSTRING(email, 1, 7) returnerer understrengene af værdierne i email kolonne, der starter ved det første tegn og går efter syv tegn.

Eksempel 2:

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

Løsning 2:

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

Resultatet er:

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

Diskussion:

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

Eksempel 3:

Du vil gerne vise den understreng, der starter ved @ tegn og slutter for enden af ​​strengen, men du kender ikke de nøjagtige indekser eller længder.

Løsning 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', 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 SUBSTRING() 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 CHARINDEX(character, column) funktion hvor tegn er det specifikke tegn, som du vil starte understrengen med (her @ ). Argumentkolonnen er den kolonne, hvorfra du gerne vil hente understrengen; det kan også være en bogstavelig streng.

Det tredje argument for SUBSTRING() funktion er længden af ​​understrengen. Du kan beregne det ved at bruge CHARINDEX() og LEN() funktioner. Det gør du ved at trække indekset fra kolonnelængden og derefter tilføje 1:

LEN(email) - CHARINDEX('@', email) + 1

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

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', 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 CHARINDEX('.', email) - CHARINDEX('@', email) beregner blot længden af ​​understrengen.


  1. Er der en måde at bruge ARRAYs i Entity Framework + PostgreSql

  2. SQLite Beskriv tabel

  3. Sådan aktiverer du SQL Server Agent XP'er ved hjælp af T-SQL

  4. Optimizer-begrænsninger med filtrerede indekser