2015-10-17 2 views
-2

Может ли кто-нибудь объяснить действительную работу функции CharIndex() в SQL Server. Я прошел через MSDN и другие веб-сайты. Но после этого я получил несколько сомнений. Я могу понять с помощью двух параметров. Но я не могу понять выход, как только мы используем третий параметр (начальная позиция). См. Приведенные ниже примеры.Функция Charindex() в SQL Server

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); 
-- Result: 7 

SELECT CHARINDEX('t', 'TechOnTheNet.com', 8); 
-- Result: 12 

Я не могу понять, почему результаты, подобные этим двум вышеуказанным.

+2

https://msdn.microsoft.com/en-us/library/ms186323.aspx говорит * start_location - Является выражением integer или bigint, с которого начинается поиск. Если start_location не указан, это отрицательное число или равно 0, поиск начинается с начала выраженияToSearch. * –

ответ

1

Третий параметр - это начальная позиция, поэтому любые совпадающие шаблоны до этой точки пропускаются.

Так что в ваших примерах: -

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3) 

Исходное положение 3, поэтому первый «т» пропускается и возвращает следующий начиная с позиции 7.

SELECT CHARINDEX('t', 'TechOnTheNet.com', 8) 

Исходное положение является 8, поэтому первый и второй экземпляры «t» пропускаются и возвращают следующий, начиная с позиции 12.

+0

Получил его. Спасибо ... –

2

От CHARIDNEX

start_location

целое или BIGINT выражение, при которой начинается поиск. Если start_location не указан, это отрицательное число или равно 0, поиск начинается с начала выраженияToSearch.

Искатель от ^ символ вперёд.

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7 
         ^---x--------> 

SELECT CHARINDEX('t', 'TechOnTheNet.com', 8); -- Result: 12 
           ^---x---> 
1

Третий аргумент (необязательно) для charindex является начальной позицией для поиска.

SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7 

В этом случае поиск t начинается в 3. Но выход будет позиция t в исходной строке.

Вы можете видеть, что это похоже на ваш другой пример.

1

Последний параметр - это начальный индекс, так что указывает первую позицию строки, в которой он будет искать указанный символ. Вывод представляет собой абсолютное смещение (одно значение) следующего вхождения указанного символа.

В вашем примере есть символ Т в смещениях 1, 7 и 12 (это не чувствительно к регистру). Функция возвращает первое вхождение, большее или равное указанному начальному смещению.

0

Вы упомянули, что прошли статью MSDN, тогда я действительно не знаю, почему вы просто пропустили эту часть CHARINDEX (expressionToFind ,expressionToSearch [ , start_location ]) этой статьи.

ясно сказано все, что вы хотите знать здесь.

CHARINDEX (expressionToFind ,expressionToSearch [ , start_location ] 

expressionToFind

Is a character expression that contains the sequence to be found. expressionToFind is limited to 8000 characters. 

expressionToSearch

Is a character expression to be searched. 

стартовая_позиция

Is an integer or bigint expression at which the search starts. 
If start_location is not specified(It's OPTIONAL PARAMETER), 
is a negative number, or is 0, 
the search starts at the beginning of expressionToSearch. 
+0

Да. Я прошел через MSDN. Но я думал, что с начальной позиции он подсчитывает количество символов, пока не найдет строку поиска. –

+1

нет, это позиция, с которой начинается поиск. –

Смежные вопросы