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


CHARINDEX (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Эта функция выполняет поиск одного символьного выражения внутри второго символьного выражения, возвращая начальную позицию первого выражения, если найдено.

Соглашения о синтаксисе Transact-SQL

Синтаксис

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Аргументы

expressionToFind

Символьное выражение, содержащее последовательность для поиска. expressionToFind имеет ограничение в 8 000 символов.

expressionToSearch

Символьное выражение, в котором производится поиск.

start_location

Выражение типа integer или bigint, с которого начинается поиск. Если start_location не указан, имеет отрицательное значение или имеет нулевое (0) значение, поиск начинается в начале выраженияToSearch.

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

bigint, если expressionToSearch имеет тип данных nvarchar(max), varbinary(max) или varchar(max); в противном случае int.

Замечания

Если выражение expressionToFind или expressionToSearch имеет тип данных Юникода (nchar или nvarchar), а другое выражение не выполняется, CHARINDEX функция преобразует это другое выражение в тип данных Юникода. CHARINDEX нельзя использовать с типами данных изображений, ntext или текстовых данных.

Если выражение expressionToFind или expressionToSearch имеет NULL значение, CHARINDEX возвращается NULL.

Если CHARINDEX не найти выражениеToFind в expressionToSearch, CHARINDEX возвращается 0.

CHARINDEX выполняет сравнения на основе входных параметров сортировки. Чтобы выполнить сравнение в указанной сортировке, используйте для COLLATE применения явной сортировки к входным данным.

Начальная возвращенная позиция начинается с 1, а не с 0.

0x0000 (char(0)) — это неопределенный символ в параметрах сортировки Windows и не может быть включен в CHARINDEXнего.

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

При использовании дополнительных параметров сортировки символов (SC) оба start_location и возвращаемое значение считают суррогатные пары как один символ, а не два. Дополнительные сведения см. в разделе о поддержке сортировки и Юникода.

Примеры

А. Возвращает начальную позицию выражения

В этом примере выполняется поиск bicycle в переменной строкового значения @document.

DECLARE @document AS 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 AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('vital', @document, 5);
GO

Вот результирующий набор.

-----------
16

В. Поиск несуществующего выражения

В этом примере показан результирующий набор, если CHARINDEX не найти выражениеToFind в expressionToSearch.

DECLARE @document AS VARCHAR (64);

SELECT @document = 'Reflectors are vital safety' +
    ' components of your bicycle.';

SELECT CHARINDEX('bike', @document);
GO

Вот результирующий набор.

-----------
0

В этом примере выполняется поиск строки 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