Как найти третью позицию «a» в слове Malayalam.using sql char index? - PullRequest
1 голос
/ 09 июня 2019
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Ответы [ 3 ]

3 голосов
/ 09 июня 2019

Вы можете использовать:

WITH cte AS (
  SELECT 'Malayalam' s
)
SELECT cte.s, s3.r
FROM cte
OUTER APPLY (SELECT CHARINDEX('a', cte.s, 0))      s1(r) -- first occurence
OUTER APPLY (SELECT CHARINDEX('a', cte.s, s1.r+1)) s2(r) -- second occurence
OUTER APPLY (SELECT CHARINDEX('a', cte.s, s2.r+1)) s3(r) -- third occurence
-- ...

db <> fiddle demo

1 голос
/ 09 июня 2019

Я думаю, что вы ищете

DECLARE @Str VARCHAR(25) = 'Malayalam';

WITH CTE AS
(
  SELECT Number + 1 CharPositionInString,
         SUBSTRING(@Str, Number + 1, 1) Character,
         ROW_NUMBER() OVER(PARTITION BY SUBSTRING(@Str, Number + 1, 1) ORDER BY Number) Occurence
  FROM master..spt_values
  WHERE Type = 'P'
        AND
        Number < LEN(@Str)
)
SELECT *
FROM CTE
ORDER BY CharPositionInString;

Возвращает:

+----------------------+-----------+-----------+
| CharPositionInString | Character | Occurence |
+----------------------+-----------+-----------+
|                    1 | M         |         1 |
|                    2 | a         |         1 |
|                    3 | l         |         1 |
|                    4 | a         |         2 |
|                    5 | y         |         1 |
|                    6 | a         |         3 |
|                    7 | l         |         2 |
|                    8 | a         |         4 |
|                    9 | m         |         2 |
+----------------------+-----------+-----------+
0 голосов
/ 09 июня 2019

Вы также можете использовать CHARINDEX, чтобы получить третью позицию символа 'a', как показано ниже -

Это вернет правильный результат, только если существует хотя бы 3 факта существования символа 'a'.

DECLARE @Word VARCHAR (100) = 'Malayalam' 
SELECT CHARINDEX('a',@Word,CHARINDEX('a',@Word,CHARINDEX('a',@Word,1)+1)+1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...