我有上面的文字我想要的是如果我输入一个字母我应该能够返回给定文本的那个字母的位置,例如,如果我输入T
,结果将是{ {1}},1
会给2
但是如果文字重复如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
答案 0 :(得分:2)
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
注意:输出将始终是第一次或第二次出现(如果存在),即使它出现了三次以上。
答案 1 :(得分:1)
试试这个
DECLARE @TBL TABLE (Col VARCHAR(100))
INSERT INTO @TBL VALUES
('TE2ASHEMA');
DECLARE @find varchar(2)
SET @find ='A'
SELECT col , DATALENGTH(col)-CHARINDEX(REVERSE(@find)
,REVERSE(col))+1 As Position FROM @TBL
-- Output: 9