Мне нужно получить второе вхождение пробела для текста ниже. Это должен быть пробел после 56, но я получаю 15-ю позицию перед 56 как первую.
select charindex(' ', 'Posted/edited: 56 days ago', 2)
Вам нужно вложить 2 CHARINDEX
функции.
Вам нужно установить 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
Два — это просто смещение в строке, поэтому он начинает искать пробел, начиная с позиции 2, а не с позиции 1 (
o
, а неP
).