SQL Server 中的 Charindex() 功能

问题描述 投票:0回答:6

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

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

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

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

sql sql-server string substring charindex
6个回答
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--->

1
投票

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

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

在这种情况下,搜索

t
从3开始。但输出将是
t
在原始字符串中的位置。

你可以看到你的其他例子也很相似。


1
投票

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

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


1
投票

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

所以在你的例子中:-

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

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

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

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


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.

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
投票

你好,你能用考试解释一下 charindex 中的 +1 和 -1 是什么意思吗?

Charindex('a','apple',0) 它是如何工作的

© www.soinside.com 2019 - 2024. All rights reserved.