sql >> Databasteknik >  >> RDS >> Database

Hur man extraherar en delsträng från en sträng i T-SQL

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

SUBSTRING(email, 1, 7) kommer att returnera delsträngarna för värdena i email kolumn som börjar med det första tecknet och går för sju tecken.

Exempel 2:

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

Lösning 2:

SELECT
  email,
  SUBSTRING(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 SUBSTRING() fungerar precis som i de tidigare exemplen. 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 på @ tecken och slutar i slutet av strängen, men du vet inte de exakta indexen eller längderna.

Lösning 3:

SELECT
  email,
  SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', 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 SUBSTRING() 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 CHARINDEX(character, column) funktion där tecken är det specifika tecken som du vill starta delsträngen med (här, @ ). Argumentkolumnen är kolumnen från vilken du vill hämta delsträngen; det kan också vara en bokstavlig sträng.

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

LEN(email) - CHARINDEX('@', 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,
  SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', 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 CHARINDEX('.', email) - CHARINDEX('@', email) beräknar helt enkelt längden på delsträngen.


  1. Begränsa dataflexibilitet i en NoSQL-databas

  2. Hur infogar man JSONB i Postgresql med Python?

  3. Hur skickar man tabellvärderade parametrar från Java till SQL Server lagrad procedur?

  4. Hur man får det aktuella datumet i MySQL