sql-server - 如何在字符串中找到N的第二个位置
问题描述
我有上面的文本我想要的是如果我输入一个字母我应该能够用给定的文本返回那个字母的位置,例如如果我输入T
结果将是,但是如果文本重复1
,2
则会给出我想要第二个重复文本的位置,例如将给出 position和position 。3
E
A
E
7
A
9
T E 2 A S H E M A
1 2 3 4 5 6 7 8 9
我已经尝试了以下代码,但E
我得到了,2
但我想要7
DECLARE @TBL TABLE (Col VARCHAR(100))
INSERT INTO @TBL VALUES
('TE2ASHEMA'); -- E = 7 AND A=9
DECLARE @find varchar(2)
SET @find ='E'
SELECT
Col,
CHARINDEX(@find,Col) AS Position
FROM @TBL
电流输出
Col Position
TE2ASHEMA 2
预期产出
Col Position
TE2ASHEMA 7
解决方案
CHARINDEX
还有第三个参数(startposition)。
所以以下应该工作:
DECLARE @TBL TABLE (Col VARCHAR(100))
INSERT INTO @TBL VALUES
('TE2ASHEMA'); -- E = 7 AND A=9
DECLARE @find varchar(2)
SET @find ='E'
SELECT
Col,
CHARINDEX(@find,Col, CASE WHEN CHARINDEX(@find,Col, CHARINDEX(@find,Col)+1) > 0
THEN CHARINDEX(@find,Col)+1
ELSE 0 END) AS Position
FROM @TBL
-- Output: 7
注意:输出将始终是第一次或第二次出现(如果存在),即使它出现三次或更多次。
推荐阅读
- c - 按值返回与按引用返回时的注意事项 - Set ADT C
- sql - 在sql中创建新变量
- css - GTM 中的悬停跟踪
- angular - 无法调试角度应用程序中的“ERROR TypeError:无法读取属性'forEach' of null”错误
- python - 如何有效地使用函数对 OrderedDict 进行排序?
- java - 如何在 android 中设置付费帐户功能?
- javascript - 如何在 HTML 中显示来自 Gmail API 的内联图像和附件——拼图的最后一部分
- html - 在谷歌浏览器下,蓝色边框线显示
- javascript - 如何使用 jquery/ajax 将 where 子句中的参数传递给 c#asp.net 中的静态 web 方法?
- node.js - 如何使用 set 2Checkout Authentication Headers?