Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Ekstrak angka dari teks di SQL Server

Ini sedikit lebih pendek. Mengubahnya menjadi Fungsi Tabel Sebaris yang menggunakan CTE rekursif untuk menemukan angka.

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
)

Jika Anda berharap memiliki lebih dari 100 angka dalam string, Anda perlu memanggilnya dengan 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabel Pivot Dinamis di SQL Server

  2. Konversi 'smalldatetime' menjadi 'time' di SQL Server (Contoh T-SQL)

  3. Apa cara terbaik untuk menyegarkan tabel rollup di bawah beban?

  4. Tambahkan kolom ke tabel dan kemudian perbarui di dalam transaksi

  5. Bandingkan Paket Eksekusi di SQL Server