如何使用TSQL从字符串中提取数字

Rod*_*cks 4 sql t-sql sql-server parsing sql-server-2008

我有一个字符串:

@string='TEST RESULTS\TEST 1\RESULT 1

除数字外,字符串/文本保持不变

  1. 需要来自TEST的1
  2. 从RESULT需要1

在以下查询中使用:

SET @sql =  "SELECT *
            FROM   TABLE
            WHERE  test = (expression FOR CASE 1 resulting IN INT 1)
                   AND result = (expression FOR CASE 2 resulting IN INT 1)"
Run Code Online (Sandbox Code Playgroud)

小智 7

看起来你已经有了一个满足你需求的解决方案,但我有一个小技巧,我用来从字符串中提取我认为可能对某人有益的数字.它利用FOR XML语句并避免显式循环.它具有良好的内联表函数或简单的标量.做它你会做什么:)

DECLARE @String varchar(255) = 'This1 Is2 my3 Test4 For Number5 Extr@ct10n';


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
Run Code Online (Sandbox Code Playgroud)

结果==> 1234510