Найти вхождение определенного символа в поле и извлекать данные до начала данных - PullRequest
0 голосов
/ 04 марта 2019

У меня есть поле, которое может иметь несколько вхождений определенного разделителя - в моем случае это '*'. Разделитель может появляться в поле не более 10 раз, но не менее 1 вхождения.не обязательно, чтобы все 10 вхождений были там одновременно в поле.Основываясь на требовании, мне нужно найти n-е вхождение разделителя и вернуть все доступные данные от разделителя до начала поля после удаления вхождения разделителя в качестве вывода.

ПРИМЕЧАНИЕ. - У меня нет записидоступ к БД, поэтому невозможно создать пользовательскую функцию, чтобы опробовать комбинацию instring / substring.

Пример:

Stack\*over\*flow\*com\*exchange\*queries\*need\*answer\*for\*thisquery\*

Требование № 1 -найти 2-е вхождение * и вернуть все, что есть на LHS после удаления ответа *

-. Stackover

Требование № 2 -поиск5-е вхождение * и возврат того, что есть на LHS после удаления *

ответа - Stackoverflowcomexchange

И так будет до тех пор, пока не будет найдено 10-е вхождение.
Мне удалось получить данные о первом вхождении и lhs, но я не смог выяснить остальные вхождения.

Используемая БД - SQL Server 2014.

1 Ответ

0 голосов
/ 05 марта 2019

Возможное быстрое решение:

declare @a varchar(100), @i int = 5, @j int = 0;

select @a = 'Stack\*over\*flow\*com\*exchange\*queries\*need\*answer\*for\*thisquery\*';

select @a = @a + replicate('\*', @i); -- Avoid delimiter not found

while @i > 0
    select @j = charindex('*', @a, @j + 1), @i -= 1;

select replace(left(@a, @j), '\*', '') as Result
...