Поделиться через


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)

В этом примере выполняется поиск строки '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)
Поддержка параметров сортировки и Юникода