如何在字符串中找到N的第二个位置

时间:2018-05-01 08:38:01

标签: sql-server tsql

我有上面的文字我想要的是如果我输入一个字母我应该能够返回给定文本的那个字母的位置,例如,如果我输入T,结果将是{ {1}},1会给2但是如果文字重复如3E我想要第二个重复文本的位置,例如A将提供职位E7职位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

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