Problém:
Máte sloupec řetězců a rádi byste z nich získali podřetězce.
Příklad 1:
V emails
tabulka, je tam sloupec email. Chcete zobrazit prvních sedm znaků každého e-mailu.
Tabulka vypadá takto:
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Řešení 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Výsledek je:
podřetězec | |
---|---|
[email protected] | jake99@ |
[email protected] | tamarab |
[email protected] | notine@ |
[email protected] | jessica |
Diskuse:
Použijte SUBSTRING()
funkce. Prvním argumentem je řetězec nebo název sloupce. Druhý argument je index znaku, na kterém by měl podřetězec začínat. Třetí argument je délka podřetězce.
Dávej si pozor! Na rozdíl od některých jiných programovacích jazyků indexy začínají na 1 , nikoli 0. To znamená, že první znak má index 1, druhý znak má index 2 atd.
SUBSTRING(email, 1, 7)
vrátí podřetězce hodnot v email
sloupec, který začíná prvním znakem a má sedm znaků.
Příklad 2:
Chcete zobrazit podřetězec mezi indexy 2 a 6 (včetně).
Řešení 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Výsledek je:
podřetězec | |
---|---|
[email protected] | ake99 |
[email protected] | amara |
[email protected] | otine |
[email protected] | essic |
Diskuse:
Používáte SUBSTRING()
fungovat stejně jako v předchozích příkladech. Tentokrát je druhým argumentem funkce 2
, protože chceme začít na indexu 2. Délka podřetězce je 5 (end_index - start_index + 1
).
Příklad 3:
Chcete zobrazit podřetězec, který začíná na @
znaménko a končí na konci řetězce, ale neznáte přesné indexy ani délky.
Řešení 3:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), LEN(email) - CHARINDEX('@', email) + 1) AS substring FROM emails;
Výsledek je:
podřetězec | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Diskuse:
Používáte SUBSTRING()
fungovat stejně jako v předchozích příkladech. Tentokrát hledáte konkrétní postavu, jejíž pozice se může lišit řádek od řádku. Chcete-li najít index konkrétního znaku, můžete použít CHARINDEX(character, column)
funkce, kde znak je konkrétní znak, kterým chcete začínat podřetězec (zde @
). Sloupec argumentu je sloupec, ze kterého chcete načíst podřetězec; může to být také doslovný řetězec.
Třetí argument funkce SUBSTRING()
funkce je délka podřetězce. Můžete jej vypočítat pomocí CHARINDEX()
a LEN()
funkcí. To provedete odečtením indexu od délky sloupce a přidáním 1:
LEN(email) - CHARINDEX('@', email) + 1
Můžete také chtít načíst podřetězec, který nekončí na konci řetězce, ale na určitém konkrétním znaku, např. před '.
'. Můžete to udělat takto:
SELECT email, SUBSTRING(email, CHARINDEX('@', email), CHARINDEX('.', email) - CHARINDEX('@', email)) AS substring FROM emails;
Výsledek tohoto dotazu je:
podřetězec | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
Část CHARINDEX('.', email) - CHARINDEX('@', email)
jednoduše vypočítá délku podřetězce.