Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrátí část znaku, binárního, textového nebo obrázkového výrazu v SQL Serveru.
Syntaxe
Syntaxe pro SQL Server
SUBSTRING ( expression , start [ , length ] )
Argumenty
výrazu
Znak, binární,text, ntext nebo výraz obrázku.
spuštění
Celé číslo nebo výraz bigint , který určuje, kde vrácené znaky začínají. (Číslování je založené na 1, což znamená, že první znak ve výrazu je 1). Pokud je začátek menší než 1, vrácený výraz začíná prvním znakem zadaným ve výrazu. V tomto případě je počet vrácených znaků největší hodnotou součtu počáteční + délky – 1 nebo 0. Pokud je začátek větší než počet znaků ve výrazu hodnoty, vrátí se výraz nulové délky.
délka
Kladné celé číslo nebo výraz bigint , který určuje, kolik znaků výrazu se vrátí. Pokud je délka záporná, vygeneruje se chyba a příkaz se ukončí. Pokud je součet začátku a délky větší než počet znaků ve výrazu, vrátí se celý výraz hodnoty začínající na začátku . Pokud je délka vynechána, vrátí se všechny znaky od počáteční pozice do konce výrazu.
Podřetězec můžete použít s volitelným argumentem délky . Pokud však použijete NULLdélku, SUBSTRING vrátí hodnotu NULL. Zkontrolujte E. Použijte substring s volitelným argumentem délky pro příklad.
Návratové typy
Vrátí data znaků, pokud je výraz jedním z podporovaných datových typů znaků. Vrátí binární data, pokud je výraz jedním z podporovaných binárních datových typů. Vrácený řetězec je stejný typ jako zadaný výraz s výjimkami zobrazenými v tabulce.
| Zadaný výraz | Návratový typ |
|---|---|
| uklízečka / varchar / Text | Varchar |
| NCHAR / nvarchar / ntext | nvarchar |
| binární / varbinary / obraz | varbinary |
Poznámky
Hodnoty pro začátek a délku musí být zadány v počtu znaků pro datové typy ntext, char nebo varchar a bajty pro text, obrázek, binární nebo varbinární datové typy.
Výraz musí být varchar(max) nebo varbinary(max), pokud začátek nebo délka obsahuje hodnotu větší než 2 147 483 647.
Doplňkové znaky (náhradní dvojice)
Pokud použijete kolace doplňkových znaků (SC), počítá se každá náhradní dvojice ve výrazu jako jeden znak počáteční i délka. Další informace najdete v tématu podpora kolace a kódování Unicode.
Příklady
A. Použití podřetězce s řetězcem znaků
Následující příklad ukazuje, jak vrátit pouze část znakového řetězce.
sys.databases Z tabulky tento dotaz vrátí názvy systémových databází v prvním sloupci, první písmeno databáze ve druhém sloupci a třetí a čtvrtý znak v posledním sloupci.
SELECT name,
SUBSTRING(name, 1, 1) AS Initial,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
WHERE database_id < 5;
Tady je soubor výsledků.
| název | Počáteční | TřetíaČtvrtéZnaky |
|---|---|---|
master |
m |
st |
tempdb |
t |
mp |
model |
m |
de |
msdb |
m |
db |
K zobrazení druhého, třetího a čtvrtého znaku řetězcové konstanty abcdefpoužijte následující dotaz.
SELECT SUBSTRING('abcdef', 2, 3) AS x;
Tady je soubor výsledků.
x
----------
bcd
B. Použití podřetězce s textem, ntextem a daty obrázků
Poznámka:
Pokud chcete spustit následující příklady, musíte nainstalovat databázi pubs.
Následující příklad ukazuje, jak vrátit prvních 10 znaků z každého sloupce textových a obrázkových dat v pub_info tabulce pubs databáze.
textová data se vrátí jako varchar a obrazová data se vrátí jako varbinary.
USE pubs;
GO
SELECT pub_id,
SUBSTRING(logo, 1, 10) AS logo,
SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756';
Tady je soubor výsledků.
pub_id logo pr_info
------ ---------------------- ----------
1756 0x474946383961E3002500 This is sa
Následující příklad ukazuje účinek SUBSTRING na textová i ntextová data. Nejprve tento příklad vytvoří novou tabulku v pubs databázi s názvem npub_info. Druhý příklad vytvoří pr_info sloupec v npub_info tabulce z prvních 80 znaků pub_info.pr_info sloupce a přidá jako ü první znak. Nakonec načte INNER JOIN všechna identifikační čísla vydavatele a SUBSTRINGtextové i ntextové sloupce s informacemi o vydavateli.
IF EXISTS (SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'npub_info')
DROP TABLE npub_info;
GO
-- Create npub_info table in pubs database. Borrowed from instpubs.sql.
USE pubs;
GO
CREATE TABLE npub_info
(
pub_id CHAR (4) NOT NULL FOREIGN KEY
REFERENCES publishers (pub_id)
CONSTRAINT UPKCL_npubinfo PRIMARY KEY CLUSTERED,
pr_info NTEXT NULL
);
GO
-- Fill the pr_info column in npub_info with international data.
RAISERROR ('Now at the inserts to pub_info...', 0, 1);
GO
INSERT npub_info
VALUES ('0736', N'üThis is sample text data for New Moon Books, publisher 0736 in the pubs database'),
('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa'),
('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da'),
('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database'),
('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d'),
('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab'),
('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i'),
('9999', N'üThis is sample text data for Lucerne Publishing, publisher 9999 in the pubs data');
GO
-- Join between npub_info and pub_info on pub_id.
SELECT pr.pub_id,
SUBSTRING(pr.pr_info, 1, 35) AS pr_info,
SUBSTRING(npr.pr_info, 1, 35) AS npr_info
FROM pub_info AS pr
INNER JOIN npub_info AS npr
ON pr.pub_id = npr.pub_id
ORDER BY pr.pub_id ASC;
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
C. Použití podřetězce s řetězcem znaků
Následující příklad ukazuje, jak vrátit pouze část znakového řetězce.
dbo.DimEmployee Z tabulky tento dotaz vrátí název rodiny v jednom sloupci s pouze prvním iniciály ve druhém sloupci.
-- Uses AdventureWorks
SELECT LastName,
SUBSTRING(FirstName, 1, 1) AS Initial
FROM dbo.DimEmployee
WHERE LastName LIKE 'Bar%'
ORDER BY LastName;
Tady je soubor výsledků.
LastName Initial
-------------------- -------
Barbariol A
Barber D
Barreto de Mattos P
Následující příklad ukazuje, jak vrátit druhý, třetí a čtvrtý znak řetězcové konstanty abcdef.
USE ssawPDW;
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x
FROM dbo.DimCustomer;
Tady je soubor výsledků.
x
-----
bcd
D. Použití řetězce SUBSTRING s argumentem NULL délky
SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];
Tady je soubor výsledků.
NULL length
-----------
NULL
E. Použití řetězce SUBSTRING s volitelným argumentem délky
Platí pro: Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, PdW (Analytics Platform System) a Warehouse a koncový bod analýzy SQL v Microsoft Fabric
Následující příklad ukazuje, jak vrátit pouze část znakového řetězce z dané počáteční pozice. Vzhledem k tomu, že argument délky není zadaný, vrátí výchozí délka zbývající znaky v řetězci.
SELECT SUBSTRING('123abc', 4) AS y;
Tady je soubor výsledků.
y
-----
abc
F. Použití substrING bez argumentu délky k vyhledání náhradních dílů v inventáři AdventureWorks2022
USE AdventureWorks2022;
GO
SELECT [ProductDescriptionID],
[Description],
SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';
Tady je soubor výsledků.
| ID popisu produktu | Popis | Replacement-Part |
|---|---|---|
| 686 | Náhradní horské kolo pro jezdce na úrovni vstupu. | horské kolo pro jezdce na úrovni vstupu. |
| 687 | Náhradní horské kolo pro ležérní na vážného jezdce. | horské kolo pro ležérní pro vážného jezdce. |
| 689 | Náhradní silniční přední kolo pro cyklistu na úrovni vstupu. | silniční přední kolo pro cyklistu na úrovni vstupu. |
| 867 | Náhradní zadní horské kolo pro jezdce na úrovni vstupu. | zadní horské kolo pro jezdce na úrovni vstupu. |
| 868 | Náhradní zadní horské kolo pro ležérní na vážného jezdce. | zadní horské kolo pro ležérní na vážné jezdce. |
| 870 | Náhradní zadní kolo pro cyklisty na úrovni vstupu. | zadní kolo pro cyklistu na úrovni vstupu. |
| 1981 | Náhradní horské kolo pro jezdce na úrovni vstupu. | horské kolo pro jezdce na úrovni vstupu. |
| 1987 | Náhradní horské kolo pro ležérní na vážného jezdce. | horské kolo pro ležérní pro vážného jezdce. |
| 1999 | Náhradní zadní kolo pro cyklistu na úrovni vstupu. | silniční zadní kolo pro cyklistu na úrovni vstupu. |
Související obsah
- VLEVO (Transact-SQL)
- LTRIM (Transact-SQL)
- VPRAVO (Transact-SQL)
- RTRIM (Transact-SQL)
- STRING_SPLIT (Transact-SQL)
- OŘÍZNUTÍ (Transact-SQL)
- řetězcové funkce (Transact-SQL)