MySQL SUBSTRING() Vysvětleno: Extrahujte části řetězce s příklady

1. Co je funkce SUBSTRING?

Funkce SUBSTRING je důležitá funkce MySQL používaná k extrahování podřetězce ze řetězce. Pomocí této funkce můžete vytáhnout jen tu část, kterou potřebujete, z dat uložených v databázi. Například je užitečná, když chcete získat část domény z e‑mailové adresy uživatele nebo získat konkrétní část 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 : Řetězec, ze kterého se má extrahovat.
  • pos : Počáteční pozice (číslování začíná od 1).
  • len : Počet znaků k extrahování (volitelné).

Pokud je pos kladná hodnota, MySQL počítá dopředu od začátku řetězce. Pokud je záporná, MySQL počítá zpětně od konce řetězce. Pokud je len vynecháno, MySQL extrahuje od zadané pozice až do konce řetězce.

1.2 Příklady použití funkce SUBSTRING

Tato funkce se používá k formátování řetězcových dat a extrahování konkrétních částí, což usnadňuje vyhledávání a efektivní zpracování informací v databázi.

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

Pro pochopení základů se podívejme na několik jednoduchých příkladů.

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, extrakce začíná od 3. znaku, a protože len je 6, je extrahováno 6 znaků.

2.2 Vynechání parametru len

Pokud vynecháte len, MySQL extrahuje od zadané pozice až do konce řetězce.

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

Výsledek je "World!", což získá vše od 8. znaku až do konce.

2.3 Použití záporné pozice

Pokud použijete zápornou hodnotu, můžete 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 jsou některé praktické příklady.

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

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

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

Tento dotaz extrahuje řetězec za „@“ a vrátí pouze část domény.

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

Tento příklad extrahuje konkrétní část kódu produktu.

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

V tomto dotazu jsou extrahovány 4 znaky počínaje 5. znakem kódu produktu a zobrazeny jako nový sloupec s názvem product_id.

3.3 Použití v poddotazu

Kombinací s poddotazem můžete extrahovat data za složitější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 je category rovno ‚Electronics‘.

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

Další funkce, které lze použít pro podobné účely jako SUBSTRING, zahrnují 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 praktické, když chcete extrahovat podřetězec ze začátku nebo konce řetězce.

4.2 Funkce SUBSTR

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

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

Tento dotaz vrací "World!", stejně jako SUBSTRING.

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

Tato sekce vysvětluje pokročilejší použití a optimalizační techniky.

5.1 Optimalizace výkonu

Použití SUBSTRING na velkých datových sadách může ovlivnit výkon. V případě potřeby vytvořte indexy a zkontrolujte plán provádění dotazu. Také, pokud často extrahujete stejný podřetězec, zvažte cachování výsledku.

5.2 Použití ve WHERE klauzuli

Můžete použít SUBSTRING v klauzuli WHERE k filtrování záznamů na základě podmínky podřetězce.

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

Tento dotaz hledá produkty, kde první 3 znaky product_code jsou ‚ABC‘.

6. Příklady a osvědčené postupy pro funkci SUBSTRING

Zde jsou praktické příklady použití SUBSTRING a osvědčené postupy pro reálnou práci.

6.1 Vzorek kódu

Následující příklad rozděluje celé jméno zákazníka na křestní jméno a příjmení.

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

V tomto dotazu jsou křestní a příjmení extrahovány z celého jména odděleného mezerou.

6.2 Osvědčené postupy

  • Extrahujte jen to, co potřebujete : Udržujte délku podřetězce co nejmenší, aby se snížil dopad na výkon.
  • Věnujte pozornost datovým typům : Pokud použijete SUBSTRING na číselná data, možná bude nutné je explicitně převést na řetězec.
  • Zvažte využití indexů : Při použití SUBSTRING v klauzuli WHERE nemusí být indexy využity efektivně, proto pečlivě sledujte výkon dotazu.

7. Zpracování chyb a rozdíly mezi verzemi

Tato sekce se zabývá zpracováním chyb při použití SUBSTRING a rozdíly mezi verzemi MySQL.

7.1 Zpracování chyb

Pokud je zadaná pozice mimo rozsah řetězce, SUBSTRING vrátí prázdný řetězec. Protože se nejedná o chybu, doporučuje se přidat logiku pro předběžné ověření výsledku, pokud je to potřeba.

7.2 Rozdíly mezi verzemi

V závislosti na verzi MySQL se může chování funkce SUBSTRING lišit. Například některé starší verze mohou zpracovávat vícebytové znaky odlišně. Zkontrolujte kompatibilitu mezi verzemi a v případě potřeby aplikujte vhodná opatření.