Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Извличане на числа от текст в SQL Server

Това е малко по-кратко. Превърна го във функция за вградена таблица, която използва рекурсивен 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL - Съединение с използване на пълен текст СЪДЪРЖА

  2. Прочетете ангажираната моментна снимка срещу нивото на изолация на моментната снимка

  3. Как да филтрирате обекти в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 19

  4. Променете типовете колони в огромна таблица

  5. Свързване към SQL Server чрез Windows удостоверяване