Не является решением регулярных выражений, и я все еще новичок в SQL, поэтому, возможно, не оптимален, но вы должны быть в состоянии проанализировать цикл WHILE
, используя
CHARINDEX
для ***
, затем используячто в качестве начальной точки для
CHARINDEX
до LF
Используйте это в качестве начальной точки для
SUBSTRING
с конечной точкой, являющейся CHARINDEX
следующей ***
конкатенацииПодстрока в выходной файл, пройдите за конечный ***
и зациклите, чтобы найти следующий.
Я поиграюсь с ним и посмотрю, могу ли я добавить пример.
РЕДАКТИРОВАТЬ- Это, вероятно, требует дополнительной проверки ошибок
declare @inText nvarchar(2000) = 'some text
some text
***[some text]
THIS SHOULD BE EXTRACTED
***[some text]
some text
some text
some text
some text
some text
***[some text]
THIS SHOULD BE EXTRACTED TOO
***[some text]
some text '
declare @delim1 nvarchar(50) = '***'
declare @delim2 char = char(10)
declare @output nvarchar(1000) = ''
declare @position int
declare @positionEnd int
set @position = CHARINDEX(@delim1,@inText)
while (@position != 0 and @position is not null)
BEGIN
set @position = CHARINDEX(@delim2,@inText,@position)
set @positionEnd = CHARINDEX(@delim1,@inText,@position)
set @output = @output + SUBSTRING(@inText,@position,@positionEnd-@position)
set @position = CHARINDEX(@delim1,@inText,@positionEnd+LEN(@delim1))
END
select @output