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)