SQL Server中的Charindex()功能



谁能解释一下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.

最新更新