Problem:
Du vill extrahera en delsträng från texten i en given kolumn.
Exempel:
Vår databas har en tabell som heter web_address
med data i kolumnerna id
och address
. Vi vill ta bort "www.
". ' i början och '.com
’ i slutet av varje address
.
id | adress |
---|---|
1 | www.example.com |
2 | www.google.com |
3 | www.learnsql.com |
Lösning 1:
Så här tar du bort de första fyra tecknen:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Så här tar du bort de fyra sista tecknen:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Så här tar du bort de första 4 tecknen och de sista 4 tecknen:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Lösning 2:
Så här tar du bort de första fyra tecknen:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Så här tar du bort de fyra sista tecknen:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Så här tar du bort de första 4 tecknen och de sista 4 tecknen:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Lösning 3:
Så här tar du bort alla tecken före det andra "." från höger:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
Så här tar du bort alla tecken efter det andra "." från vänster:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
För att ta bort alla tecken efter det andra "." från vänster, ta sedan bort alla tecken före det första "." från höger:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
Resultatet är:
delsträng |
---|
exempel |
learnsql |
Diskussion:
Den första och den andra lösningen tar båda bort ett specificerat antal tecken från texten med SUBSTR()
eller SUBSTRING()
fungera. SUBSTR()
är en synonym för SUBSTRING()
. De kräver båda strängen och startpositionen som argument. Det sista argumentet, som definierar antalet tecken som ska extraheras, är valfritt. Om det sista argumentet utelämnas kommer hela strängen (från startpunkten) att returneras.
I den tredje lösningen, SUBSTRING_INDEX()
funktionen tar bort texten före eller efter de angivna tecknen. Den kräver som argument strängen, tecknet och hur många instanser av tecknet som ska påträffas till där textextraktionen börjar.