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, SUBSTR(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 SUBSTR()
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.
>SUBSTR(email, 1, 7) vrátí podřetězce hodnot ve sloupci e-mailu, které začínají prvním znakem a mají sedm znaků.
Příklad 2:
Chcete zobrazit podřetězec mezi indexy 2 a 6 (včetně).
Řešení 2:
SELECT email, SUBSTR(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 SUBSTR()
fungovat stejně jako v předchozím příkladu. 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:
Chtěli byste zobrazit podřetězec, který začíná znakem @ a končí na konci řetězce, ale neznáte přesné indexy ani délky.
Řešení 3:
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(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 SUBSTR()
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 INSTR(column, character)
funkce, kde sloupec je doslovný řetězec nebo sloupec, ze kterého chcete podřetězec načíst, a znak je character
na kterém chcete začít podřetězec (zde @
).
Třetí argument SUBSTR()
funkce je délka podřetězce. Můžete jej vypočítat pomocí INSTR()
a LENGTH()
funkcí. Toho dosáhnete odečtením indexu od délky sloupce a přidáním 1:
LENGTH(email) - INSTR(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, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(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 INSTR(email, '.') - INSTR(email, '@')
jednoduše vypočítá délku podřetězce.