首页 > 解决方案 > 如何在字符串中找到N的第二个位置

问题描述

我有上面的文本我想要的是如果我输入一个字母我应该能够用给定的文本返回那个字母的位置,例如如果我输入T结果将是,但是如果文本重复12则会给出我想要第二个重复文本的位置,例如将给出 position和position 。3EAE7A9

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

标签: sql-servertsql

解决方案


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

注意:输出将始终是第一次或第二次出现(如果存在),即使它出现三次或更多次。


推荐阅读