sql >> Database >  >> RDS >> Sqlserver

Getallen extraheren uit een tekst in SQL Server

Dit is wat korter. Veranderde het in Inline Table Function die een recursieve CTE gebruikt om de nummers te vinden.

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
)

Als u verwacht meer dan 100 getallen in de string te hebben, moet u deze aanroepen met 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)


  1. Converteer Mysql latin1_swedish_ci naar utf8_bin

  2. Hoe alleen die records formatteren waarvoor ORA-01843 niet wordt gegenereerd?

  3. Hoe gehele getallen te aggregeren in postgresql?

  4. MySQL:meerdere invoegingen voor een enkele kolom