sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man extraherar nummer från en sträng med TSQL

Det verkar som att du redan har en lösning som mötte dina behov men jag har ett litet knep som jag använder för att extrahera siffror från strängar som jag trodde kunde vara till nytta för någon. Den drar fördel av FOR XML-satsen och undviker explicita loopar. Det gör en bra inline-tabellfunktion eller enkel skalär. Gör med det vad du vill :)

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. Räkna förekomster av en understräng i en MySQL-kolumn

  2. Run Time error:-2147217887(80040e21) Systemet kan inte hitta en meddelandetext för meddelandenumret 0x80040e21 i meddelandefilen för OraOLEDB

  3. Generated Value i Postgres

  4. Vad är skillnaden mellan mysqli_affected_rows och mysqli_num_rows?