首页 > 解决方案 > 一些数字被截断。我想提取所有数字

问题描述

我试图只解析字符串中的数字。我的代码必须非常接近,但这里有些问题,因为最后一个字符串中的几个数字被截断,尽管前两个字符串看起来不错。

这是我的代码。

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

标签: sqlsql-server

解决方案


我会这样想:

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 小提琴。


推荐阅读