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.

  • ✂️ Účel: Funkce SUBSTRING() vrací specifickou část řetězce na základě zdrojového výrazu, počáteční pozice a délky.
  • 🔢 Tři argumenty: Výraz, počáteční pozice a celková délka jsou ve funkci SQL Server SUBSTRING() povinné.
  • 📍 Index založený na jednotce: Výchozí pozice je založena na 1, takže první znak se počítá jako pozice jedna, což zabraňuje chybám způsobeným odchylkou o jedničku.
  • 🔎 S CHARINDEXEM: Párování SUBSTRING() s CHARINDEX() vyhledá oddělovač a extracts text před ním nebo za ním.
  • ↔️ Proti LEVICI a PRAVICI: Na rozdíl od LEFT() a RIGHT(), SUBSTRING() extracpostavy z libovolné pozice, nejen z konců.
  • ⚠️ Okrajové případy: Délka NULL vrací NULL, zatímco délka za řetězcem vrací zbytek bez vyvolání chyby.

Funkce SUBSTRING() v SQL Serveru s příklady T-SQL

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:

Diagram znázorňující, jak SUBSTRING() fungujetracts znaky z počáteční pozice pro danou délku

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:

Guru99 ukázková tabulka se sloupci Tutorial_ID a Tutorial_name použitými v příkladech SUBSTRING

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:

Výsledná mřížka vracející první dva znaky názvu_tutoriálu jako sloupec SUB

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:

Výsledná mřížka vrací zbytek Tutorial_name, když požadovaná délka překročí řetězec

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.

Nejčastější dotazy

SQL Server používá SUBSTRING(); SUBSTR() je název používaný v Oracle a MySQLObě funkce vracejí část řetězce, ale SUBSTRING() je standardní funkce jazyka Transact-SQL, takže SUBSTR() se na serveru SQL Server nespustí.

Ano. Protože SUBSTRING() vrací hodnotu, může se tato hodnota objevit v klauzulích WHERE, SELECT a ORDER BY. Filtrování podle SUBSTRING() obvykle zabraňuje vyhledávání indexu, takže vzor LIKE je pro vyhledávání prefixů často rychlejší.

Ano, ale SQL Server nejprve převede hodnotu na řetězec, buď implicitně, nebo pomocí CAST nebo CONVERT. Počáteční pozice a délka pak počítají znaky, nikoli číslice nebo části data, takže hodnotu formátujte pečlivě.

Tříargumentová forma se chová podobně, ale detaily se liší. MySQL také umožňuje SUBSTR() a záporné počáteční pozice, zatímco SQL Server používá SUBSTRING() a zachází se začátkem pod jedničkou pomocí pravidla efektivní délky.

Funkce SUBSTRING() vrací stejnou kategorii jako svůj vstup: varchar pro znaková data, nvarchar pro text Unicode a varbinary pro binární výrazy. Délka závisí na požadovaném podřetězci, nikoli na celém zdrojovém sloupci.

Zabalteping Sloupec v SUBSTRING() uvnitř klauzule WHERE znemožňuje sargable predikát, takže SQL Server nemůže v tomto sloupci použít indexové vyhledávání. Pro shody s prefixy obvykle lépe funguje vzor LIKE 'value%'.

Ano. GitHub Copilot Umí vytvářet výrazy SUBSTRING() a CHARINDEX(), včetně parsování na základě oddělovačů, z příkazového řádku v přirozeném jazyce. Před spuštěním dotazu vždy ověřte počáteční pozici, délku a indexování založené na 1.

Asistenti umělé inteligence a strojového učení překládají pravidla v jednoduché angličtině do kombinací SUBSTRING(), CHARINDEX(), LEFT() a RIGHT(), navrhují výpočty délky a označují chyby s rozlišením jedničku. Vývojář před nasazením každého návrhu zkontroluje jeho správnost.

Shrňte tento příspěvek takto: