谁能解释一下 SQL Server 中 CharIndex() 函数的实际工作原理。我浏览了 MSDN 和其他网站。但在阅读这些内容后,我几乎没有怀疑。我能够理解 2 个参数。但是一旦我们使用第三个参数(开始位置)我就无法理解输出请看下面的例子。
SELECT CHARINDEX('t', 'TechOnTheNet.com', 3);
-- Result: 7
SELECT CHARINDEX('t', 'TechOnTheNet.com', 8);
-- Result: 12
我无法理解为什么上述两个结果会这样。
CHARIDNEX
开始位置
是搜索开始处的整数或 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
在这种情况下,搜索
t
从3开始。但输出将是t
在原始字符串中的位置。
你可以看到你的其他例子也很相似。
最后一个参数是起始索引,表示要查找指定字符的第一个字符串位置。输出是指定字符下一次出现的绝对偏移量(从一开始)。
在您的示例中,偏移量 1、7 和 12 处有一个 T 字符(不区分大小写)。该函数返回大于或等于指定起始偏移量的第一次出现。
第三个参数是起始位置,因此跳过该点之前的任何匹配模式。
所以在你的例子中:-
SELECT CHARINDEX('t', 'TechOnTheNet.com', 3)
起始位置是 3,所以第一个 't' 被跳过并返回从位置 7 开始的下一个。
SELECT CHARINDEX('t', 'TechOnTheNet.com', 8)
起始位置是 8,所以 't' 的第一个和第二个实例被跳过并返回下一个从位置 12 开始的实例。
你提到你已经阅读了 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.
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.
你好,你能用考试解释一下 charindex 中的 +1 和 -1 是什么意思吗?
Charindex('a','apple',0) 它是如何工作的