Funkce MySQL SUBSTRING: syntaxe, příklady a osvědčené postupy

1. Co je funkce SUBSTRING?

Funkce SUBSTRING v MySQL je nezbytný nástroj pro získání části řetězce. Pomocí této funkce můžete získat jen potřebnou část dat z databáze. Například je užitečná pro získání domény z e‑mailové adresy uživatele nebo pro vytažení konkrétní sekce z kódu produktu.

1.1 Základní syntaxe

Základní syntaxe funkce SUBSTRING je následující:

SUBSTRING(str, pos)
SUBSTRING(str, pos, len)
  • str : Cílový řetězec, ze kterého se má extrahovat.
  • pos : Počáteční pozice (index od 1).
  • len : Počet znaků, které se mají extrahovat (volitelné).

Pokud je pos kladné, počítá se od začátku řetězce. Pokud je záporné, počítá se od konce. Pokud je len vynecháno, funkce extrahuje od zadané pozice až do konce řetězce.

1.2 Příklady použití funkce SUBSTRING

Tato funkce se používá pro formátování řetězcových dat nebo pro získání konkrétních částí, což zvyšuje efektivitu získávání a zpracování dat v databázích.

2. Základní použití funkce SUBSTRING

Podívejme se na jednoduchý příklad, který ukazuje, jak funkce funguje.

2.1 Extrahování části řetězce

Následující dotaz extrahuje 6 znaků počínaje 3. znakem řetězce „Hello, World!“.

SELECT SUBSTRING('Hello, World!', 3, 6);

Výsledek je "llo, W". Protože pos je 3, začíná na 3. znaku, a s len nastaveným na 6 extrahuje 6 znaků.

2.2 Vynechání délky

Pokud vynecháte len, bude se extrahovat od zadané pozice až do konce řetězce.

SELECT SUBSTRING('Hello, World!', 8);

Výsledek je "World!", počínaje 8. znakem až do konce.

2.3 Záporná pozice

Použití záporné hodnoty umožňuje určit pozici od konce řetězce.

SELECT SUBSTRING('Hello, World!', -5);

Tento dotaz vrátí "orld!", což je posledních 5 znaků.

3. Praktické aplikace funkce SUBSTRING

Funkce SUBSTRING se často používá v reálných datových operacích. Zde je několik příkladů.

3.1 Získání domény z e‑mailové adresy

Kombinací SUBSTRING s LOCATE můžete získat část domény z e‑mailové adresy.

SELECT email, SUBSTRING(email, LOCATE('@', email) + 1) AS domain FROM users;

Tento dotaz získá řetězec za znakem „@“, takže získáte jen část domény.

3.2 Extrahování části kódu produktu

Příklad extrahování konkrétní části kódu produktu.

SELECT product_code, SUBSTRING(product_code, 5, 4) AS product_id FROM products;

Tento dotaz extrahuje 4 znaky počínaje 5. znakem kódu produktu a zobrazí je jako nový sloupec product_id.

3.3 Použití s poddotazy

Kombinací s poddotazy můžete získávat data za složitých podmínek.

SELECT id, SUBSTRING(description, 1, 10) AS short_desc FROM (SELECT * FROM products WHERE category = 'Electronics') AS sub;

Tento dotaz extrahuje prvních 10 znaků sloupce description z produktů, kde category je ‚Electronics‘.

4. Porovnání s ostatními řetězcovými funkcemi

Další funkce s podobným účelem jako SUBSTRING jsou LEFT, RIGHT a SUBSTR.

4.1 Funkce LEFT a RIGHT

  • LEFT(str, len) : Vrátí zadaný počet znaků od začátku řetězce.
  • RIGHT(str, len) : Vrátí zadaný počet znaků od konce řetězce.
SELECT LEFT('Hello, World!', 5);  -- "Hello"
SELECT RIGHT('Hello, World!', 6); -- "World!"

Tyto funkce jsou užitečné, když chcete získat část řetězce z konkrétního konce.

4.2 Funkce SUBSTR

SUBSTR je alias pro SUBSTRING a lze jej použít stejným způsobem.

SELECT SUBSTR('Hello, World!', 8); -- "World!"

Tento dotaz vrátí "World!" stejně jako SUBSTRING.

5. Pokročilé použití a optimalizace funkce SUBSTRING

Zde je návod, jak používat SUBSTRING efektivněji a optimalizovat jeho výkon.

5.1 Optimalizace výkonu

Použití SUBSTRING na velkých datových sadách může ovlivnit výkon. Zvažte vytvoření indexů a kontrolu plánu provedení dotazu, když je to nutné. Pokud často extrahujete stejný podřetězec, cachování výsledků může také pomoci.

5.2 Použití v klauzuli WHERE

Můžete použít SUBSTRING v klauzuli WHERE k vyhledávání na základě části řetězce.

SELECT * FROM products WHERE SUBSTRING(product_code, 1, 3) = 'ABC';

Tento dotaz načte produkty, jejichž product_code začíná na ‚ABC‘.

6. Příklady a nejlepší postupy pro funkci SUBSTRING

Zde jsou praktické příklady a nejlepší postupy pro použití SUBSTRING.

6.1 Ukázkový kód

Následující ukázka rozdělí úplné jméno zákazníka na křestní a příjmení.

SELECT name, SUBSTRING(name, 1, LOCATE(' ', name) - 1) AS first_name,
       SUBSTRING(name, LOCATE(' ', name) + 1) AS last_name
FROM customers;

Tento dotaz extrahuje křestní a příjmení z úplného jména odděleného mezerou.

6.2 Nejlepší postupy

  • Minimální extrakce : Extrahujte pouze to, co je nutné pomocí SUBSTRING , aby se minimalizoval dopad na výkon.
  • Dbejte na datový typ : Při aplikaci SUBSTRING na číselná data explicitně jej nejprve přetypujte na řetězec.
  • Zohlednění indexů : Použití SUBSTRING v klauzuli WHERE může zabránit použití indexů, takže zkontrolujte výkon vašeho dotazu.

7. Zpracování chyb a rozdíly ve verzích

Podívejme se na zpracování chyb a rozdíly v chování SUBSTRING napříč verzemi MySQL.

7.1 Zpracování chyb

Pokud je zadaná pozice v SUBSTRING mimo rozsah řetězce, vrátí prázdný řetězec. Protože to není chyba, doporučuje se přidat logiku k ověření výsledků předem.

7.2 Rozdíly ve verzích

V závislosti na verzi MySQL se chování SUBSTRING může lišit. Například některé starší verze zpracovávají multibajtové znaky jinak. Zkontrolujte kompatibilitu mezi verzemi a aplikujte vhodná opatření podle potřeby.