sql >> データベース >  >> RDS >> Sqlserver

SQLServerのテキストから数値を抽出する

    これは少し短いです。これを、再帰CTEを使用して数値を検索するインラインテーブル関数に変換しました。

    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
    )
    

    文字列に100を超える数値が含まれると予想される場合は、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. SQL:主キーと外部キー参照を使用してテーブルを作成する(

    2. EclipseLinkおよびPostgreSQLでのUUIDの使用

    3. Mysql'ストレージエンジンからエラー-1を取得しました'エラー

    4. プラハPostgreSQLミートアップ