Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak wyodrębnić liczby z ciągu znaków za pomocą TSQL

Wygląda na to, że masz już rozwiązanie, które spełniło Twoje potrzeby, ale mam małą sztuczkę, której używam, aby wyodrębnić liczby z ciągów, które moim zdaniem mogą komuś przynieść korzyści. Wykorzystuje instrukcję FOR XML i unika jawnych pętli. Stanowi dobrą funkcję tabeli inline lub prosty skalar. Zrób z tym, co chcesz :)

DECLARE @String varchar(255) = 'This1 Is2 my3 Test4 For Number5 [email protected]';


SELECT
    CAST(( 
        SELECT CASE --// skips alpha. make sure comparison is done on upper case
            WHEN ( ASCII(UPPER(SUBSTRING(@String, Number, 1))) BETWEEN 48 AND 57 )
            THEN SUBSTRING(@String, Number, 1)
            ELSE ''END
        FROM
        ( 
            SELECT TOP 255 --// east way to get a list of numbers
                                           --// change value as needed.
                ROW_NUMBER() OVER ( ORDER BY ( SELECT 1 ) ) AS Number
             FROM master.sys.all_columns a
                CROSS JOIN master.sys.all_columns b 
        ) AS n
        WHERE Number <= LEN(@String)
        --// use xml path to pivot the results to a row
        FOR XML PATH('') ) AS varchar(255)) AS Result

Wynik ==> 1234510



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instrukcje:tworzenie wyzwalacza dla daty modyfikacji automatycznej aktualizacji w programie SQL Server 2008

  2. Znajdowanie poprzedniej niezerowej wartości z listy uporządkowanej według daty

  3. Korzystanie z wygenerowanego przez bazę danych GUID i datetime z EF4

  4. In-Memory OLTP:Co nowego w SQL Server 2016

  5. Czy funkcje danych przestrzennych programu SQL Server 2008 są przydatne do mapowania zapytań?