Problém:
Chcete extrahovat podřetězec z textu v daném sloupci.
Příklad:
Naše databáze obsahuje tabulku s názvem web_address
s údaji ve sloupcích id
a address
. Chceme odstranit „www.
“ na začátku a „.com
“ na konci každé address
.
id | adresa |
---|---|
1 | www.example.com |
2 | www.google.com |
3 | www.learnsql.com |
Řešení 1:
Chcete-li odstranit první 4 znaky:
SELECT SUBSTR(address, 5, LENGTH(address) -4) AS substring FROM web_address;
Chcete-li odstranit poslední 4 znaky:
SELECT SUBSTR(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Chcete-li odstranit první 4 znaky a poslední 4 znaky:
SELECT SUBSTR(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Řešení 2:
Chcete-li odstranit první 4 znaky:
SELECT SUBSTRING(address, 5, LENGTH(address)) AS substring FROM web_address;
Chcete-li odstranit poslední 4 znaky:
SELECT SUBSTRING(address, 1, LENGTH(address) -4) AS substring FROM web_address;
Chcete-li odstranit první 4 znaky a poslední 4 znaky:
SELECT SUBSTRING(address, 5, LENGTH(address) -8) AS substring FROM web_address;
Řešení 3:
Chcete-li odstranit všechny znaky před druhým ‚.‘ zprava:
SELECT SUBSTRING_INDEX(address, '.', -2) AS substring FROM web_address;
Chcete-li odstranit všechny znaky za druhým ‚.‘ zleva:
SELECT SUBSTRING_INDEX(address, '.', 2) AS substring FROM web_address;
Chcete-li odstranit všechny znaky za druhým ‚.‘ zleva, pak odstraňte všechny znaky před prvním ‚.‘ zprava:
SELECT SUBSTRING_INDEX( SUBSTRING_INDEX(address, '.', 2), '.', -1 ) AS substring FROM web_address;
Výsledek je:
podřetězec |
---|
příklad |
learnsql |
Diskuse:
První i druhé řešení odeberou z textu zadaný počet znaků pomocí SUBSTR()
nebo SUBSTRING()
funkce. SUBSTR()
je synonymem pro SUBSTRING()
. Oba vyžadují řetězec a počáteční pozici jako argumenty. Poslední argument, který definuje počet znaků k extrahování, je volitelný. Pokud je vynechán poslední argument, bude vrácen celý řetězec (od počátečního bodu).
Ve třetím řešení SUBSTRING_INDEX()
funkce odstraní text před nebo za zadanými znaky. Jako argumenty vyžaduje řetězec, znak a kolik výskytů znaku by se mělo nacházet v místě, kde začíná extrakce textu.