我正在使用 SQL Server 2014。我有以下语句:
SELECT CHARINDEX('C', 'ABCDEFGC', 3);
Run Code Online (Sandbox Code Playgroud)
我得到的结果是3而不是8. 我观察到不同字符串的相同行为。这是该函数的预期行为吗?
如果最后一个参数是任何其他数字,似乎没问题。
谢谢
这一点都不奇怪,这就是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。
希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
534 次 |
| 最近记录: |