Как найти вторую позицию N в строке - PullRequest
0 голосов
/ 01 мая 2018

У меня есть текст выше, что мне нужно, если я наберу букву, я смогу вернуть позицию этой буквы с данным текстом, например, если я наберу T, результат будет 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

Ожидаемый результат

Col      Position
TE2ASHEMA   7

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Попробуйте

     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
0 голосов
/ 01 мая 2018

CHARINDEX также имеет третий аргумент (начальная позиция).

Так должно работать следующее:

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

Примечание: Выход всегда будет первым или вторым вхождением (если оно существует), даже если оно происходит в три раза или более.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...