Substring() v SQL Serveru: Jak použít s příkladem
⚡ Chytré shrnutí
SUBSTRING() v SQL Serveru extracFunkce ts vrací část znaku, textu nebo binárního výrazu, vrací nastavený počet znaků z vybrané počáteční pozice a přirozeně se páruje s funkcí CHARINDEX pro analýzu založenou na oddělovačích.

Co je Substring()?
SUBSTRING() je funkce v SQL který umožňuje uživateli odvodit podřetězec z libovolného daného řetězce dle potřeby. SUBSTRING() extracVrací řetězec zadané délky, počínaje od daného místa ve vstupním řetězci. Účelem funkce SUBSTRING() v SQL je vrátit specifickou část řetězce.
Syntaxe pro Substring()
SUBSTRING(Expression, Starting Position, Total Length)
Zde:
- Výraz SUBSTRING() v SQL Server může být libovolný znak, binární soubor, text nebo obrázek. Výraz je zdrojový řetězec, ze kterého je podřetězec načten.
- Počáteční pozice určuje pozici ve výrazu, odkud by měl nový podřetězec začínat.
- Celková délka je celková očekávaná délka výsledného podřetězce z výrazu, počínaje od počáteční pozice.
Pravidla pro použití SUBSTRING()
- Všechny tři argumenty jsou povinné ve funkci SUBSTRING() v MS SQL.
- Pokud je počáteční pozice větší než maximální počet znaků ve výrazu, funkce SUBSTRING() v SQL Serveru nic nevrátí.
- Celková délka může překročit maximální délku původního řetězce v řádu znaků. V tomto případě je výsledným podřetězcem celý řetězec, počínaje počáteční pozici ve výrazu až do posledního znaku výrazu.
Následující diagram znázorňuje použití funkce SUBSTRING() v SQL Serveru:
Příklady podřetězců T-SQL
Předpoklad: Předpokládejme, že máme tabulku s názvem 'Guru99' se dvěma sloupci a čtyřmi řádky, jak je znázorněno níže. Použijeme tento'Guru99' tabulka v následujících příkladech:
Dotaz 1: SUBSTRING() v SQL s délkou menší než celková maximální délka výrazu.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,1,2) As SUB from Guru99;
Výsledek: Následující diagram zobrazuje podřetězec sloupce „Tutorial_name“ jako sloupec „SUB“. Počáteční pozice je 1 a délka je 2, takže jsou vráceny první dva znaky:
Dotaz 2: SUBSTRING() v SQL Serveru s délkou větší než celková maximální délka výrazu.
SELECT Tutorial_name, SUBSTRING(Tutorial_name,2,8) As SUB from Guru99;
Výsledek: Následující diagram zobrazuje podřetězec sloupce „Tutorial_name“ jako sloupec „SUB“. I když je délka podřetězce větší než celková maximální délka výrazu, nedojde k žádné chybě a dotaz vrátí celý řetězec od počáteční pozice dále:
SUBSTRING s CHARINDEX v SQL Serveru
Velmi častým reálným použitím funkce SUBSTRING() je extractext, který se nachází před nebo za oddělovačem, například doménou v e-mailové adrese. Samotná funkce SUBSTRING() potřebuje pevnou počáteční pozici, ale pozice oddělovače se liší řádek od řádku. Funkce CHARINDEX() to řeší vrácením pozice znaku v řetězci:
CHARINDEX(substring_to_find, expression [, start_location])
Vnořením CHARINDEX() do SUBSTRING() se počáteční pozice stane dynamickou. Následující příklad vyhledá @ symbol a vrací vše za ním. A proměnlivý obsahuje hodnotu vzorku:
DECLARE @Email VARCHAR(50) = 'john.doe@guru99.com'; SELECT SUBSTRING(@Email, CHARINDEX('@', @Email) + 1, LEN(@Email)) AS Domain;
Zde CHARINDEX('@', @Email) vyhledá pozici symbolu @, přidáním 1 se posune za něj a SUBSTRING() pak extracts zbývající znaky. Pro výše uvedenou hodnotu dotaz vrátí doménu guru99.comTento vzor CHARINDEX-plus-SUBSTRING je standardní způsob parsování strukturovaných řetězců v T-SQL.
SUBSTRING vs. LEFT a RIGHT v SQL Serveru
SQL Server také poskytuje funkce LEFT() a RIGHT() pro načítání znaků ze začátku nebo konce řetězce. Jsou kratší na zápis, ale jsou omezeny na dva konce. Funkce SUBSTRING() je nejflexibilnější, protože může začínat na libovolné pozici. Následující tabulka je porovnává:
| funkce | Argumenty | Extracts od | Ekvivalent SUBSTRING() |
| LEFT(výraz; n) | 2 | Začátek řetězce | SUBSTRETĚZEC(výraz; 1; n) |
| RIGHT(výraz; n) | 2 | Konec řetězce | SUBSTRING(výraz, LEN(výraz) – n + 1, n) |
| SUBSTRETĚZEC(výraz; začátek; délka) | 3 | Jakákoli pozice | Nehodí |
Stručně řečeno, LEFT() a RIGHT() jsou pohodlné zkratky pro konce řetězců, zatímco SUBSTRING() zpracovává obecná velká a malá písmena, včetně znaků převzatých ze středu.
Záporné, nulové a NULL argumenty v SUBSTRING
Kromě základních pravidel je užitečné vědět, jak se SUBSTRING() chová na okrajích. Pokud je počáteční pozice nula nebo záporná, SQL Server vypočítá efektivní délku (start + length – 1) a začne číst od pozice jedna. Pokud je kterýkoli argument NULL, výsledek je NULL. Níže uvedená tabulka, ověřená s oficiálními PODŘEZEC (Transact-SQL) reference ukazuje tyto případy:
| volání | Výsledek | Důvod |
| PODŘEZEC('Guru99', 1, 4) | Guru | Normální volání: čtyři znaky od pozice jedna. |
| PODŘEZEC('Guru99', 0, 3) | Gu | Začněte pod jedničkou: efektivní délka je 0 + 3 – 1 = 2. |
| PODŘEZEC('Guru99', 4, 100) | u99 | Délka za řetězcem vrací zbytek bez chyby. |
| PODŘEZEC('Guru99', 3, NULA) | NULL | Argument s hodnotou NULL způsobí, že celý výsledek bude NULL. |
Znalost těchto okrajových případů zabraňuje překvapením, když je počáteční pozice vypočítána z jiného sloupce nebo proměnlivý to by mohlo být nula nebo NULL.




