Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में किसी टेक्स्ट से नंबर निकालें

यह थोड़ा छोटा है। इसे इनलाइन टेबल फंक्शन में बदल दिया जो संख्याओं को खोजने के लिए एक पुनरावर्ती सीटीई का उपयोग करता है।

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. SQL सर्वर संग्रह सूची स्क्रिप्ट -1

  2. SQL WHERE क्लॉज मिलान मान अनुगामी रिक्त स्थान के साथ

  3. क्या सीटीई, उप-क्वेरी, अस्थायी तालिका या तालिका चर के बीच कोई प्रदर्शन अंतर है?

  4. SQL से प्रोग्राम कैसे चलाएं?

  5. एक अद्वितीय पहचानकर्ता कॉलम जोड़ना और नई गाइड उत्पन्न करने के लिए डिफ़ॉल्ट जोड़ना