-2

谁能解释 SQL Server 中 CharIndex() 函数的实际工作原理。我浏览过 MSDN 和其他网站。但读完这些后,我几乎没有怀疑。我能够理解2个参数。但是一旦我们使用第三个参数(起始位置),我就无法理解输出请参见下面的示例。

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

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

我无法理解为什么上述两个结果会这样。

4

5 回答 5

2

CHARIDNEX

开始位置

是开始搜索的整数或 bigint 表达式。如果 start_location 未指定、为负数或为 0,则搜索从 expressionToSearch 的开头开始。

搜索是从^符号向前的。

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

SELECT CHARINDEX('t', 'TechOnTheNet.com', 8); -- Result: 12
                              ^---x--->
于 2015-10-17T15:30:36.663 回答
1

第三个参数是起始位置,因此在此点之前的任何匹配模式都将被跳过。

所以在你的例子中: -

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

起始位置是 3,所以第一个 't' 被跳过并返回从位置 7 开始的下一个。

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

起始位置是 8,因此 't' 的第一个和第二个实例被跳过并返回从位置 12 开始的下一个实例。

于 2015-10-17T15:30:12.600 回答
1

第三个参数(可选)charindex是搜索的开始位置。

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

在这种情况下,搜索t从 3 开始。但输出将是t原始字符串中的位置。

您可以看到它与您的其他示例类似。

于 2015-10-17T15:30:45.513 回答
1

最后一个参数是起始索引,因此它指示它将查找指定字符的第一个字符串位置。输出是指定字符下一次出现的绝对偏移量(从 1 开始)。

在您的示例中,偏移量 1、7 和 12 处有一个 T 字符(不区分大小写)。该函数返回大于或等于指定起始偏移量的第一个匹配项。

于 2015-10-17T15:31:16.733 回答
0

你提到你已经阅读了MSDN文章然后我真的不知道你为什么错过CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] ) 了那篇文章的这一部分。

它清楚地说明了你想知道的一切。

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] 

表达式查找

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

表达式搜索

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.
于 2015-10-17T15:34:45.140 回答