谁能解释一下CharIndex()函数在SQL Server中的实际工作?我已经浏览了MSDN和其他网站。但读完这些后,我没有多少疑虑。我能够理解2个参数。但是当我们使用第三个参数(起始位置)时,我无法理解输出,请参见下面的示例。
SELECT CHARINDEX('t', 'TechOnTheNet.com', 3);
-- Result: 7
SELECT CHARINDEX('t', 'TechOnTheNet.com', 8);
-- Result: 12
我不明白为什么上面两个的结果是那样的。
From CHARIDNEX
start_location
是从搜索开始的整数或bigint表达式。如果未指定start_location,为负数或为0,则搜索从expressionToSearch开头开始
从^
符号开始查找
SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7
^---x-------->
SELECT CHARINDEX('t', 'TechOnTheNet.com', 8); -- Result: 12
^---x--->
charindex
的第三个参数(可选)是搜索的开始位置。
SELECT CHARINDEX('t', 'TechOnTheNet.com', 3); -- Result: 7
在本例中,从3开始搜索t
。但是输出将是t
在原始字符串中的位置。
你可以看到在你的其他例子中也是类似的
最后一个参数是开始索引,因此它指示将在其中查找指定字符的第一个字符串位置。输出是指定字符下一次出现的绝对偏移量(基于1)。
在您的示例中,在偏移量1,7和12处有一个T字符(它不区分大小写)。
第三个参数是起始位置,因此在此之前的任何匹配模式都将被跳过。
所以在你的例子中:-
SELECT CHARINDEX('t', 'TechOnTheNet.com', 3)
起始位置为3,因此跳过第一个"t"并返回从位置7开始的下一个"t"。
SELECT CHARINDEX('t', 'TechOnTheNet.com', 8)
起始位置为8,因此跳过't'的第一个和第二个实例,并返回从位置12开始的下一个实例。
你提到你已经阅读了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.
start_location
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.