CHARINDEX (Transact-SQL)

Выполняет поиск выражения expression1 в выражении expression2 и в случае обнаружения возвращает его начальную позицию. Поиск начинается с позиции start_location.

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

Синтаксис

CHARINDEX ( expression1 ,expression2 [ , start_location ] ) 

Аргументы

  • expression1
    Символьное выражение, содержащее искомую последовательность символов. Длина выражения expression1 не должна превышать 8000 символов.

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

  • start_location
    Целое число или выражение bigint, с которого начинается поиск. Если аргумент start_location не указан, имеет отрицательное значение или равен нулю, поиск начинается с начала выражения expression2.

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

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

Замечания

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

Если аргумент expression1 или аргумент expression2 имеет тип NULL, то функция CHARINDEX возвращает NULL, если уровень совместимости базы данных равен 70 или выше. Если уровень совместимости базы данных равен 65 или ниже, CHARINDEX возвращает NULL, только если и аргумент expression1 и аргумент expression2 имеют значение NULL.

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

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

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

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

Примеры

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

DECLARE @document varchar(64)

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

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

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

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

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)

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

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 jst 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 jst ein Test' с учетом регистра.

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

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

----------- 
13          

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

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

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

----------- 
13