Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So extrahieren Sie mit TSQL Zahlen aus einer Zeichenfolge

Sieht so aus, als hätten Sie bereits eine Lösung, die Ihren Anforderungen entspricht, aber ich habe einen kleinen Trick, mit dem ich Zahlen aus Zeichenfolgen extrahiere, von denen ich dachte, dass sie jemandem nützen könnten. Es nutzt die FOR XML-Anweisung und vermeidet explizite Schleifen. Es macht eine gute Inline-Tabellenfunktion oder einen einfachen Skalar. Mach damit was du willst :)

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

Ergebnis ==> 1234510