Некоторые числа сокращаются. Я хотел бы вытащить все цифры - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь разобрать только числа из строки. Мой код должен быть довольно близок, но здесь что-то не так, потому что несколько чисел в последней строке усекаются, хотя первые две строки кажутся нормальными.

Вот мой код.

Drop Table SampleData
Create table SampleData
(id int, factor varchar(100))

insert into #source_Policy values (1 ,'AAA 1.058 (Protection Class)')
insert into #source_Policy values (2, 'BBB0.565 (Construction) ')
insert into #source_Policy values ( 3, 'CCCCC   1.04890616 (Building Limit Rel')


Select *
From SampleData 


;with processTable as (
    select id, factor, num    
    from SampleData    
  
           cross apply (
            select (select C + ''
            from (select N, substring(factor, N, 1) C from (values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)) Num(N)   where N<=datalength(factor)) t
            where PATINDEX('%[0-9.]%',C)> 0
            order by N
            for xml path(''))
        ) p0 (num)  
) 


SELECT id, factor, num
FROM processTable

Это результат, который я получаю.

введите описание изображения здесь

В столбце num вместо 1.04 я хотел бы видеть полную точность, поэтому: 1.04890616

1 Ответ

1 голос
/ 05 августа 2020

Я бы подумал примерно так:

select s.*, v2.numstr
from sampledata s cross apply
     (values (stuff(factor, 1, patindex('%[0-9]%', factor) - 1, ''))) v(str) cross apply
     (values (left(v.str, patindex('%[^0-9.]%', v.str + 'x') - 1))) v2(numstr);

Здесь - это SQL Fiddle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...