如何使用SQL的CHARINDEX函数查找单词Malayalam中第三个'a'的位置?
如何用SQL的CHARINDEX函数查找单词Malayalam中第三个'a'的位置?
嘿,要定位Malayalam里第三个'a'的位置,我们可以通过嵌套调用CHARINDEX函数来实现——每次调用都在上一次找到的位置之后继续搜索,就能精准定位到第N个目标字符。
先再明确下你给出的CHARINDEX语法:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
具体实现步骤
我们可以分三次调用CHARINDEX,逐步缩小搜索范围:
- 找第一个'a'的位置:默认从字符串开头搜索
SELECT CHARINDEX('a', 'Malayalam') AS FirstA; -- 返回结果:2(因为字符串索引从1开始,第一个a在第2位) - 找第二个'a'的位置:从第一个'a'的下一位开始搜索
SELECT CHARINDEX('a', 'Malayalam', CHARINDEX('a', 'Malayalam') + 1) AS SecondA; -- 返回结果:5 - 找第三个'a'的位置:从第二个'a'的下一位开始搜索
SELECT CHARINDEX('a', 'Malayalam', CHARINDEX('a', 'Malayalam', CHARINDEX('a', 'Malayalam') + 1) + 1) AS ThirdA; -- 返回结果:7,这就是我们要的第三个'a'的位置
优化写法(用变量提升可读性)
如果觉得嵌套写法太绕,也可以用变量拆分逻辑,后期维护更方便:
DECLARE @targetStr VARCHAR(20) = 'Malayalam'; DECLARE @firstA INT = CHARINDEX('a', @targetStr); DECLARE @secondA INT = CHARINDEX('a', @targetStr, @firstA + 1); DECLARE @thirdA INT = CHARINDEX('a', @targetStr, @secondA + 1); SELECT @thirdA AS ThirdAPosition;
小提示
如果目标字符串里'a'的出现次数不足3次,CHARINDEX会返回0,所以实际业务中可以加个判断,比如先确认前两次搜索结果不为0,再执行第三次搜索,避免无效操作。
内容的提问来源于stack exchange,提问作者user11146569
相关产品推荐
相关产品推荐

