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.