sql >> Databasteknik >  >> RDS >> Sqlserver

Extrahera siffror från en text i SQL Server

Det här är lite kortare. Förvandlade den till Inline Table Function som använder en rekursiv CTE för att hitta siffrorna.

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
)

Om du förväntar dig att ha fler än 100 nummer i strängen måste du ringa den med 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. Använda @DECLARE i MYSQL 5.1

  2. Letar efter datauppsättning att testa sökningar i FULLTEXT-stil på

  3. SQL - Returnera rader med de flesta kolumnmatchningar

  4. Backend-versionen stöds inte för att designa databasdiagram eller tabeller