Получение второго вхождения из функции charindex на сервере sql

Мне нужно получить второе вхождение пробела для текста ниже. Это должен быть пробел после 56, но я получаю 15-ю позицию перед 56 как первую.

select charindex(' ', 'Posted/edited: 56 days ago', 2)

Два — это просто смещение в строке, поэтому он начинает искать пробел, начиная с позиции 2, а не с позиции 1 (o, а не P).

Gordon Linoff 10.04.2019 13:54

Вам нужно вложить 2 CHARINDEX функции.

Larnu 10.04.2019 13:56
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
6
2
26 361
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вам нужно установить START_LOCATION вместо CHARINDEX. Это означает, после какого символа должен стоять charindex. В нашем примере нам нужно найти после 56. Итак, код должен выглядеть так:

select CHARINDEX(' ', 'Posted/edited: 56 days ago', 
    CHARINDEX('56', 'Posted/edited: 56 days ago', 0));

ВЫХОД:

18

Вы уже получаете позицию второго пробела (' ') в своем запросе => 15. Чтобы уточнить, например, вы можете использовать его для извлечения содержимого с этой точки и далее, используя следующие

select substring('Posted/edited: 56 days ago', 
           charindex(' ', 'Posted/edited: 56 days ago', 2) + 1, 
           len('Posted/edited: 56 days ago'))

Установка начального местоположения — отличная идея. Однако я бы использовал первое вхождение символа +1 с возможностью поиска в качестве начального местоположения, поскольку ситуация может различаться. Таким образом, решение будет таким:

Выберите charindex(' ','Опубликовано/отредактировано: 56 дней назад',(charindex(' ', 'Опубликовано/отредактировано: 56 дней назад') +1))

Выход 18

Другие вопросы по теме