sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan udtrækkes tal fra en streng ved hjælp af TSQL

Det ser ud til, at du allerede har en løsning, der opfyldte dine behov, men jeg har et lille trick, som jeg bruger til at udtrække tal fra strenge, som jeg troede kunne gavne nogen. Det udnytter FOR XML-sætningen og undgår eksplicitte loops. Det gør en god inline tabelfunktion eller simpel skalar. Gør med det, hvad du vil :)

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

Resultat ==> 1234510



  1. MySQL:kolonner med lav kardinalitet/selektivitet =hvordan indekseres?

  2. MySQL til SQL Server-migrering

  3. på dublet nøgleopdatering med en betingelse?

  4. Fatal fejl:Kald til en medlemsfunktion prepare() på boolean in