如有一字段F1,用什么语句把数字的取出来
F1
A123  -->123
AB345 -->345
C111B -->111怎么处理? 

解决方案 »

  1.   

    create function [dbo].[m_getnumber]
    (
       @mysql_one nvarchar(200)
    )
    returns varchar(200)
    begin
        declare @mysql_two varchar(200)
        select @mysql_two=
        substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),patindex('%[^0-9.]%',substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),
        len(@mysql_one)-patindex('%[0-9.]%',@mysql_one)+1))-1)
        return @mysql_two;
    end
     
    --测试
    select dbo.[m_getchinese]('China2009中国HRB4-1v')
    select dbo.[m_getstr]('China2009中国HRB4-1v')
    select dbo.[m_getnumber]('China2009中国HRB4-1v')
      

  2.   

    还可以:
    /* 取出字符串中间的数字(第二版)*/
    create function [dbo].[m_getnumberV2.0]
    (
           @mysql_one nvarchar(200)
    )
    returns varchar(200)
    begin
        declare @mysql_two varchar(200)
        declare @sql_one int
        declare @sql_two int
        select @sql_one= patindex('%[0-9.]%',@mysql_one)
        select @sql_two=
        patindex('%[^0-9.]%',
        substring(@mysql_one,patindex('%[0-9.]%',@mysql_one),len(@mysql_one)-patindex('%[0-9.]%',@mysql_one)+1))
        if @sql_two=0
           begin
               select @mysql_two= substring (@mysql_one,@sql_one,len(@mysql_one)+1-@sql_one)
           end
        else
           begin
               select @mysql_two=substring (@mysql_one,@sql_one,@sql_two-1)
           end
        return @mysql_two;
    end
     
    --测试示例
    select dbo.[m_getnumberV2.0] ('字段.456A(AA)A')--正常
    select dbo.[m_getnumberV2.0] ('CHinese2.1day')--正常
    select dbo.[m_getnumberV2.0] ('Name5.01From')--正常
    select dbo.[m_getnumberV2.0] ('9898Address')--正常
    select dbo.[m_getnumberV2.0] ('aaaaaForm2.3333')--正常
      

  3.   

    IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp
    goCREATE TABLE #temp(F1 varchar(100))
    INSERT #temp
    SELECT 'A123' UNION ALL
    SELECT 'AB345' UNION ALL
    SELECT 'C111B' UNION ALL
    SELECT 'AB'--截取第一段出现的数字串:
    SELECT F1=SUBSTRING(F1,1,CASE WHEN PATINDEX('%[^0-9]%', F1) = 0 THEN LEN(F1) ELSE PATINDEX('%[^0-9]%', F1)-1 END)
    FROM
    (
    SELECT F1=SUBSTRING(F1,PATINDEX('%[0-9]%', F1),LEN(F1))
    FROM #temp
    WHERE PATINDEX('%[0-9]%', F1) > 0
    ) T
    /*
    F1
    123
    345
    111
    */
      

  4.   


    create function [dbo].[get_number]
    (@s1 nvarchar(200))
    return vchar(200)
    begin
    declare @s2 vchar(200)
    declare @s3 vchar(200)
    declare @i int
    select @i=1
    select @s3=''
    loop:
    select @s2=substring(@s1,@i,1)
    if @s2 like '[0-9]'
    select @s3=@s3+@s2
    end if
    select @i=@i+1
    if @i<=len(@s1)
    goto loop
    end