sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo extraer números de una cadena usando TSQL

Parece que ya tiene una solución que satisfizo sus necesidades, pero tengo un pequeño truco que uso para extraer números de cadenas que pensé que podrían beneficiar a alguien. Aprovecha la instrucción FOR XML y evita bucles explícitos. Es una buena función de tabla en línea o escalar simple. Haz con él lo que quieras :)

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

Resultado ==> 1234510