CHARINDEX (Transact-SQL)
Выполняет поиск выражения expression1 в выражении expression2 и в случае обнаружения возвращает его начальную позицию. Поиск начинается с аргумента start_location.
Синтаксис
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 не может использоваться с типами данных text, ntext и image.
Если аргумент expression1 или аргумент expression2 имеет тип NULL, то функция CHARINDEX возвращает NULL, если уровень совместимости базы данных равен 70 или выше. Если уровень совместимости базы данных равен 65 или ниже, CHARINDEX возвращает NULL, только если и аргумент expression1 и аргумент expression2 имеют значение NULL.
Если аргумент expression1 не найден в expression2, функция CHARINDEX возвращает 0.
Функция CHARINDEX выполняет сравнения на основе параметров сортировки входных данных. Для выполнения сравнения в указанных параметрах сортировки можно воспользоваться функцией COLLATE, чтобы явно указать параметры сортировки для входных данных.
Начальная возвращенная позиция начинается с 1, а не с 0.
Примеры
В следующем примере возвращается позиция, с которой начинается последовательность символов 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