CHARINDEX (Transact-SQL)

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

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

Синтаксис

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

Аргументы

  • expressionToFind
    Символьное выражение, содержащее последовательность символов, которую надо найти. Максимальная длина аргумента expressionToFind составляет 8000 символов.

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

  • start_location
    Значение типа integer или bigint, определяющее позицию, с которой начинается поиск. Если аргумент start_location не указан, имеет отрицательное значение или равен нулю, то поиск начинается с начала выражения expressionToSearch.

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

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

Замечания

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

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

Если аргумент expressionToFind не найден в expressionToSearch, функция CHARINDEX возвращает 0.

Функция CHARINDEX выполняет сравнения на основе параметров сортировки входных данных. Для выполнения сравнения в указанных параметрах сортировки вы можете воспользоваться функцией COLLATE, чтобы явно указать параметры сортировки для входных данных.

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

Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в CHARINDEX.

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

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

Примеры

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

В следующем примере возвращается позиция, с которой начинается последовательность символов bicycle в столбце DocumentSummary таблицы Document.

USE AdventureWorks2012;
GO
DECLARE @document varchar(64);

SELECT @document = 'Reflectors are vital safety' +
                   ' components of your bicycle.';
SELECT CHARINDEX('bicycle', @document);
GO

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

----------- 
48          

Б.Поиск с конкретной позиции

В следующем примере используется необязательный аргумент start_location для поиска vital в столбце DocumentSummary, начиная с пятого символа.

USE AdventureWorks2012;
GO
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)

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

В следующем примере показан результирующий набор, если аргумент expressionToFind не найден в аргументе expressionToSearch.

USE AdventureWorks2012;
GO
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' с учетом регистра в 'Das ist ein Test'.

USE tempdb;
GO
--perform a case sensitive search
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

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

-----------

0

В следующем примере выполняется поиск строки 'Test' с учетом регистра в 'Das ist ein Test'.

USE tempdb;
GO
SELECT CHARINDEX ( 'Test',
       'Das ist ein Test'
       COLLATE Latin1_General_CS_AS);

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

-----------

13

Д.Выполнение поиска без учета регистра

В следующем примере выполняется поиск строки 'TEST' в 'Das ist ein Test' без учета регистра.

USE tempdb;
GO
SELECT CHARINDEX ( 'TEST',
       'Das ist ein Test'
       COLLATE Latin1_General_CI_AS)
GO

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

-----------

13

См. также

Справочник

Строковые функции (Transact-SQL)

+ (объединение строк) (Transact-SQL)

Основные понятия

Поддержка параметров сортировки и Юникода