Extract numbers from a text in SQL Server

后端 未结 5 2202
自闭症患者
自闭症患者 2020-12-03 22:10

i was searching script to extract number from text in sql server and i found this

CREATE FUNCTION [dbo].[GetNumbersFromText](@String VARCHAR(2000))
RETURNS @         


        
5条回答
  •  失恋的感觉
    2020-12-03 22:37

    This is a bit shorter. Turned it into Inline Table Function that uses a recursive CTE to find the numbers.

    create function [dbo].[GetNumbersFromText](@String varchar(2000))
    returns table as return
    (
      with C as
      (
        select cast(substring(S.Value, S1.Pos, S2.L) as int) as Number,
               stuff(s.Value, 1, S1.Pos + S2.L, '') as Value
        from (select @String+' ') as S(Value)
          cross apply (select patindex('%[0-9]%', S.Value)) as S1(Pos)
          cross apply (select patindex('%[^0-9]%', stuff(S.Value, 1, S1.Pos, ''))) as S2(L)
        union all
        select cast(substring(S.Value, S1.Pos, S2.L) as int),
               stuff(S.Value, 1, S1.Pos + S2.L, '')
        from C as S
          cross apply (select patindex('%[0-9]%', S.Value)) as S1(Pos)
          cross apply (select patindex('%[^0-9]%', stuff(S.Value, 1, S1.Pos, ''))) as S2(L)
        where patindex('%[0-9]%', S.Value) > 0
      )
      select Number
      from C
    )
    

    If you expect to have more than 100 numbers in the string you need to call it with option (maxrecursion 0).

    declare @S varchar(max)
    set @S = 'Give me 120 this week and 50 next week'
    select number from GetNumbersFromText(@S) option (maxrecursion 0)
    

提交回复
热议问题