CHARINDEX (Transact-SQL)
Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure конечной точке аналитики платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric Хранилище в Microsoft Fabric
Эта функция выполняет поиск одного символьного выражения внутри второго символьного выражения, возвращая начальную позицию первого выражения, если найдено.
Соглашения о синтаксисе Transact-SQL
Синтаксис
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Аргументы
expressionToFind
Символьное выражение, содержащее последовательность для поиска. expressionToFind имеет ограничение 8000 символов.
expressionToSearch
Символьное выражение, в котором производится поиск.
start_location
Выражение типа integer или bigint, с которого начинается поиск. Если аргумент start_location не указан, имеет отрицательное значение или равен нулю (0), то поиск начинается с начала выражения expressionToSearch.
Типы возвращаемых данных
bigint, если expressionToSearch имеет тип данных nvarchar(max), varbinary(max) или varchar(max); в противном случае int.
Замечания
Если выражение expressionToFind или expressionToSearch имеет тип данных Юникода (nchar или nvarchar), а второе выражение — нет, функция CHARINDEX преобразует такое другое выражение в тип данных Юникода. Функция CHARINDEX не поддерживает типы данных image, ntext и text.
Если выражение expressionToFind или expressionToSearch имеет значение NULL, то CHARINDEX возвращает значение NULL.
Если функции CHARINDEXне удается найти expressionToFind в expressionToSearch, она возвращает 0.
Функция CHARINDEX выполняет сравнения на основе параметров сортировки входных данных. Для выполнения сравнения в указанных параметрах сортировки используйте функцию COLLATE, чтобы явно указать параметры сортировки для входных данных.
Начальная возвращенная позиция начинается с 1, а не с 0.
Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в CHARINDEX.
Дополнительные символы (суррогатные пары)
Если используются параметры сортировки SC, и в start_location, и в возвращаемом значении суррогатные пары учитываются как один символ, а не как два. Дополнительные сведения см. в статье Collation and Unicode Support.
Примеры
А. Возвращение начальной позиции выражения
В этом примере выполняется поиск bicycle
в переменной строкового значения @document
.
DECLARE @document VARCHAR(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO
Вот результирующий набор.
-----------
48
B. Поиск с конкретной позиции
В этом примере используется необязательный параметр start_location для запуска поиска vital
в пятом столбце переменной строкового значения @document
.
DECLARE @document VARCHAR(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('vital', @document, 5);
GO
Вот результирующий набор.
-----------
16
(1 row(s) affected)
C. Поиск несуществующего выражения
В этом примере показан результирующий набор, который выводится если функции CHARINDEX не удается найти expressionToFind в expressionToSearch.
DECLARE @document VARCHAR(64);
SELECT @document = 'Reflectors are vital safety' +
' components of your bicycle.';
SELECT CHARINDEX('bike', @document);
GO
Вот результирующий набор.
-----------
0
(1 row(s) affected)
D. Выполнение поиска с учетом регистра
В этом примере выполняется поиск строки 'TEST'
в строке 'This is a Test``'
с учетом регистра.
USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
'This is a Test'
COLLATE Latin1_General_CS_AS);
Вот результирующий набор.
-----------
0
В этом примере выполняется поиск строки 'Test'
в 'This is a Test'
с учетом регистра.
USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
'This is a Test'
COLLATE Latin1_General_CS_AS);
Вот результирующий набор.
-----------
11
Е. Выполнение поиска без учета регистра
В этом примере выполняется поиск строки 'TEST'
в 'This is a Test'
без учета регистра.
USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
'This is a Test'
COLLATE Latin1_General_CI_AS);
GO
Вот результирующий набор.
-----------
11
Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)
F. Поиск с начала строкового выражения
В этом примере возвращается первая позиция строки is
в строке This is a string
, начиная с позиции 1 (первого символа) в строке This is a string
.
SELECT CHARINDEX('is', 'This is a string');
Вот результирующий набор.
---------
3
G. Поиск с позиции, отличной от первой
В этом примере возвращается первая позиция строки is
в строке This is a string
, начиная с позиции 4 (четвертого символа).
SELECT CHARINDEX('is', 'This is a string', 4);
Вот результирующий набор.
---------
6
H. Результаты в случае, если строка не найдена
В этом примере демонстрируется возвращаемое значение в случае, если функции CHARINDEX не удается найти строку string_pattern в строке.
SELECT TOP(1) CHARINDEX('at', 'This is a string') FROM dbo.DimCustomer;
Вот результирующий набор.
---------
0
См. также
LEN (Transact-SQL)
PATINDEX (Transact-SQL)
Строковые функции (Transact-SQL)
+ (Объединение строк) (Transact-SQL)
Поддержка параметров сортировки и Юникода