Пожалуйста, попробуйте этот код и дайте мне знать, если это работает для всего вашего набора данных.Предположения здесь:
1) Ваши цифры всегда идут после слов «фракция выброса левого желудочка»
2) Нет никаких других цифр после слов «фракция выброса левого желудочка», кромезначения, которые определяют нижнюю и верхнюю границы
3) Нижняя и верхняя границы всегда идут слева направо (от малого к большому)
4) Имя вашей стартовой таблицы: # temp
declare @temp table (id int, field varchar(max))
insert @temp
select id, replace(right(Textfield, len(Textfield)-charindex('left ventricular ejection fraction', Textfield)+1),
'left ventricular ejection fraction','') field
from #temp
declare @holding table (id int, lowerbd varchar(max), upperbd varchar(max))
declare @iterator int =1
declare @prevfield varchar(max)
declare @field varchar(max)
declare @originalfield varchar(max)
declare @number varchar(max)=''
while @iterator<=(select max(id) from @temp)
begin
select @originalfield = field from @temp where id=@iterator
while len(@originalfield) >0
begin
set @prevfield=@field
select @field=left(@originalfield,1)
set @originalfield=
case
when len(@originalfield)>1 then substring(@originalfield, 2, len(@originalfield))
else '' end
if @field like '%[0-9]%'
begin
set @number = @number+@field
end
if @field like '%[0-9]%' and @prevfield like '%[0-9]%'
begin
if not exists(select 1 from @holding where id= @iterator)
begin
insert @holding
select @iterator, @number, null
set @number=''
end
else
begin
insert @holding
select @iterator, null, @number
set @number=''
end
end
end
set @iterator=@iterator+1
end
select id, max(lowerbd)lowerbd, max(upperbd)upperbd from @holding
group by id