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 |
|---|
| jake99@gmail.com |
| tamarablack@zoho.com |
| notine@yahoo.fr |
| jessica1995@onet.pl |
Lösning 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Resultatet är:
| e-post | delsträng |
|---|---|
| jake99@gmail.com | jake99@ |
| tamarablack@zoho.com | tamarab |
| notine@yahoo.fr | notine@ |
| jessica1995@onet.pl | 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 |
|---|---|
| jake99@gmail.com | ake99 |
| tamarablack@zoho.com | amara |
| notine@yahoo.fr | otine |
| jessica1995@onet.pl | 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 |
|---|---|
| jake99@gmail.com | @gmail.com |
| tamarablack@zoho.com | @zoho.com |
| notine@yahoo.fr | @yahoo.fr |
| jessica1995@onet.pl | @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 |
|---|---|
| jake99@gmail.com | @gmail |
| tamarablack@zoho.com | @zoho |
| notine@yahoo.fr | @yahoo |
| jessica1995@onet.pl | @onet |
Delen CHARINDEX('.', email) - CHARINDEX('@', email) beräknar helt enkelt längden på delsträngen.