SQL SERVER CHARINDEX 的奇怪结果

5 sql-server

我正在使用 SQL Server 2014。我有以下语句:

SELECT CHARINDEX('C', 'ABCDEFGC', 3);
Run Code Online (Sandbox Code Playgroud)

我得到的结果是3而不是8. 我观察到不同字符串的相同行为。这是该函数的预期行为吗?

如果最后一个参数是任何其他数字,似乎没问题。

谢谢

Eri*_*ing 9

这一点都不奇怪,这就是CHARINDEX 的工作原理。您传入的第三个参数是开始搜索表达式的起始位置。

如果您使用 CHARINDEX 和SUBSTRING来查找两个表达式之间的文本,那么您将不得不处理很多问题。

如果您开始在示例中的 C 的 CHARINDEX 处搜索,您会得到相同的结果。

SELECT CHARINDEX('C', 'ABCDEFGC', CHARINDEX('C', 'ABCDEFGC'));
Run Code Online (Sandbox Code Playgroud)

返回 3

您需要开始搜索CHARINDEX 一个位置 之后以获得下一个位置。否则,它会在它检查的第一个位置找到搜索到的表达式。

SELECT CHARINDEX('C', 'ABCDEFGC', CHARINDEX('C', 'ABCDEFGC') + LEN('C'));
Run Code Online (Sandbox Code Playgroud)

返回 8

如果你开始搜索在最后一次出现,CHARINDEX 将回绕。

SELECT CHARINDEX('C', 'ABCDEFGC', CHARINDEX('C', 'ABCDEFGC', 9));
Run Code Online (Sandbox Code Playgroud)

也返回 3。

希望这可以帮助!