SUBSTRING (Transact-SQL)SUBSTRING (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Возвращает часть символьного, двоичного, текстового или графического выражения в SQL ServerSQL Server.Returns part of a character, binary, text, or image expression in SQL ServerSQL Server.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

SUBSTRING ( expression ,start , length )  

АргументыArguments

expressionexpression
Выражение типа character, binary, text, ntext или image.Is a character, binary, text, ntext, or image expression.

startstart
Целое число или выражение типа bigint, указывающее начальную позицию возвращаемых символов.Is an integer or bigint expression that specifies where the returned characters start. (Нумерация начинается с 1, то есть первый символ в выражении имеет позицию 1.)(The numbering is 1 based, meaning that the first character in the expression is 1). Если аргумент start имеет значение меньше 1, то возвращаемое выражение начинается с первого символа, который указан в аргументе expression.If start is less than 1, the returned expression will begin at the first character that is specified in expression. В этом случае количество возвращаемых символов является наибольшим значением либо суммы start + length– 1, либо 0.In this case, the number of characters that are returned is the largest value of either the sum of start + length- 1 or 0. Если значение start больше количества символов в выражении значения, возвращается выражение нулевой длины.If start is greater than the number of characters in the value expression, a zero-length expression is returned.

lengthlength
Положительное целое число или выражение типа bigint, указывающее количество символов выражения expression, которое будет возвращено.Is a positive integer or bigint expression that specifies how many characters of the expression will be returned. Если значение length отрицательно, возникает ошибка и выполнение инструкции прерывается.If length is negative, an error is generated and the statement is terminated. Если сумма start и length больше количества символов в expression, то возвращается целочисленное выражение значения, начинающееся со значения start.If the sum of start and length is greater than the number of characters in expression, the whole value expression beginning at start is returned.

Типы возвращаемых данныхReturn Types

Возвращает символьные данные, если expression имеет один из поддерживаемых символьных типов данных.Returns character data if expression is one of the supported character data types. Возвращает двоичные данные, если аргумент expression имеет один из поддерживаемых двоичных типов данных.Returns binary data if expression is one of the supported binary data types. Возвращенная строка имеет тот же самый тип, как и заданное выражение. Исключения указаны в таблице.The returned string is the same type as the specified expression with the exceptions shown in the table.

Заданное выражениеSpecified expression Возвращаемый типReturn type
char/varchar/textchar/varchar/text varcharvarchar
nchar/nvarchar/ntextnchar/nvarchar/ntext nvarcharnvarchar
binary/varbinary/imagebinary/varbinary/image varbinaryvarbinary

RemarksRemarks

Значения start и length должны быть указаны в виде количества символов для типов данных ntext, char или varchar и байтов для типов данных text, image, binary или varbinary.The values for start and length must be specified in number of characters for ntext, char, or varchar data types and bytes for text, image, binary, or varbinary data types.

Аргумент expression должен иметь тип varchar(max) или varbinary(max) , если аргумент start или length содержит значение, превышающее 2 147 483 647.The expression must be varchar(max) or varbinary(max) when the start or length contains a value larger than 2147483647.

Дополнительные символы (суррогатные пары)Supplementary Characters (Surrogate Pairs)

При использовании параметров сортировки дополнительных символов (SC) и start, и length обрабатывают каждую суррогатную пару в expression как один символ.When using supplementary character (SC) collations, both start and length count each surrogate pair in expression as a single character. Дополнительные сведения см. в статье Collation and Unicode Support.For more information, see Collation and Unicode Support.

ПримерыExamples

A.A. Использование SUBSTRING с символьной строкойUsing SUBSTRING with a character string

Следующий пример показывает, как получить часть символьной строки.The following example shows how to return only a part of a character string. Из таблицы sys.databases этот запрос возвращает имена системных баз данных в первом столбце, первую букву имени базы данных во втором столбце и третий и четвертый символы в последнем столбце.From the sys.databases table, this query returns the system database names in the first column, the first letter of the database in the second column, and the third and fourth characters in the final column.

SELECT name, SUBSTRING(name, 1, 1) AS Initial ,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases  
WHERE database_id < 5;   

Ниже приводится результирующий набор.Here is the result set.

namename InitialInitial ThirdAndFourthCharactersThirdAndFourthCharacters
mastermaster mm stst
tempdbtempdb tt mpmp
modelmodel mm dede
msdbmsdb mm dbdb

Далее показано, как можно вывести второй, третий и четвертый символ строковой константы abcdef.Here is how to display the second, third, and fourth characters of the string constant abcdef.

SELECT x = SUBSTRING('abcdef', 2, 3);  

Ниже приводится результирующий набор.Here is the result set.

x  
----------  
bcd  
 
(1 row(s) affected)

Б.B. Использование SUBSTRING с данными типа text, ntext или imageUsing SUBSTRING with text, ntext, and image data

Примечание

Для выполнения приведенных ниже примеров необходимо установить базу данных pubs.To run the following examples, you must install the pubs database.

В приведенном ниже примере показано, как вернуть первые 10 символов из каждого столбца данных text и image в таблице pub_info базы данных pubs.The following example shows how to return the first 10 characters from each of a text and image data column in the pub_info table of the pubs database. Данные text возвращаются как varchar, а данные image — как varbinary.text data is returned as varchar, and image data is returned as varbinary.

USE pubs;  
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,   
   SUBSTRING(pr_info, 1, 10) AS pr_info  
FROM pub_info  
WHERE pub_id = '1756';  

Ниже приводится результирующий набор.Here is the result set.

pub_id logo    pr_info
------ ---------------------- ----------
1756   0x474946383961E3002500 This is sa

(1 row(s) affected)

В приведенном ниже примере показано влияние функции SUBSTRING на данные типов text и ntext.The following example shows the effect of SUBSTRING on both text and ntext data. Во-первых, пример создает новую таблицу в базе данных pubs под именем npub_info.First, this example creates a new table in the pubs database named npub_info. Во-вторых, пример создает столбец pr_info в таблице npub_info из первых 80 символов столбца pub_info.pr_info и добавляет ü в качестве первого символа.Second, the example creates the pr_info column in the npub_info table from the first 80 characters of the pub_info.pr_info column and adds an ü as the first character. Наконец, с помощью предложения INNER JOIN извлекаются все идентификационные номера издателей, а также обработанные функцией SUBSTRING значения столбцов типа text и ntext со сведениями об издателях.Lastly, an INNER JOIN retrieves all publisher identification numbers and the SUBSTRING of both the text and ntext publisher information columns.

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  
    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 pr INNER JOIN npub_info npr  
   ON pr.pub_id = npr.pub_id  
ORDER BY pr.pub_id ASC;  

Примеры: Хранилище данных SQL AzureAzure SQL Data Warehouse и Параллельное хранилище данныхParallel Data WarehouseExamples: Хранилище данных SQL AzureAzure SQL Data Warehouse and Параллельное хранилище данныхParallel Data Warehouse

В.C. Использование SUBSTRING с символьной строкойUsing SUBSTRING with a character string

Следующий пример показывает, как получить часть символьной строки.The following example shows how to return only a part of a character string. Из таблицы dbo.DimEmployee данный запрос возвращает фамилию в одном столбце и первую букву имени в другом.From the dbo.DimEmployee table, this query returns the last name in one column with only the first initial in the second column.

-- Uses AdventureWorks  
  
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial  
FROM dbo.DimEmployee  
WHERE LastName LIKE 'Bar%'  
ORDER BY LastName;  

Ниже приводится результирующий набор.Here is the result set.

LastName             Initial
-------------------- -------
Barbariol            A
Barber               D
Barreto de Mattos    P

В приведенном ниже примере показано, как получить второй, третий и четвертый символы строковой константы abcdef.The following example shows how to return the second, third, and fourth characters of the string constant abcdef.

USE ssawPDW;  
  
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x FROM dbo.DimCustomer;  

Ниже приводится результирующий набор.Here is the result set.

x
-----
bcd

См. также:See Also

LEFT (Transact-SQL)LEFT (Transact-SQL)
LTRIM (Transact-SQL)LTRIM (Transact-SQL)
RIGHT (Transact-SQL)RIGHT (Transact-SQL)
RTRIM (Transact-SQL)RTRIM (Transact-SQL)
STRING_SPLIT (Transact-SQL)STRING_SPLIT (Transact-SQL)
TRIM (Transact-SQL)TRIM (Transact-SQL)
Строковые функции (Transact-SQL)String Functions (Transact-SQL)