sql >> Database >  >> RDS >> Sqlserver

Hoe getallen uit een string te halen met TSQL

Het lijkt erop dat je al een oplossing hebt die aan je behoeften voldeed, maar ik heb een kleine truc die ik gebruik om getallen uit strings te halen waarvan ik dacht dat iemand er baat bij zou kunnen hebben. Het maakt gebruik van de FOR XML-instructie en vermijdt expliciete lussen. Het is een goede inline-tabelfunctie of een eenvoudige scalair. Doe ermee wat je wilt :)

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

Resultaat ==> 1234510



  1. Hoe 2 seconden wachten?

  2. Postgresql - Basisarrays en array_agg

  3. MySQL gewogen gemiddelde in een enkele zoekopdracht

  4. Hoe het ROracle-pakket op Windows 7 te installeren?