create proc p_subs @str varchar(1000),@start int
as
declare @leng int
set @leng=len(@str)
print substring(@str,@start,@leng-@start+1) 
exec p_subs '223888884',4

解决方案 »

  1.   

    select right('X888884',6)RIGHT
    返回字符串中从右边开始指定个数的字符。 语法
    RIGHT ( character_expression , integer_expression ) 参数
    character_expression字符或二进制数据的表达式。character_expression 可以是常量、变量或列。character_expression 可以是能够隐式转换为 varchar 或 nvarchar 的任何数据类型(除了 text 或 ntext)。否则,请使用 CAST 函数显式转换 character_expression。integer_expression正整数,指定 character_expression 将返回多少字符。如果 integer_expression 是负数,则返回一个错误。返回类型
    varchar 或 nvarchar注释
    兼容级别可能影响返回值。有关更多信息,请参见 sp_dbcmptlevel。
      

  2.   

    --试试这个吧!declare @str varchar(100)
    declare @start int
    set @str='X888884'
    select @start=patindex('%[0-9]%',@str)
    select right(@str,len(@str)-@start+1)--结果
    /*
                                                                                                         
    ---------------------------------------------------------------------------------------------------- 
    888884(所影响的行数为 1 行)
    */
      

  3.   

    right(str,len(str)-PATINDEX('%[0-9]%',str)+1)
      

  4.   

    --写成了一个函数,这样我觉得无论是表还是字符串都比较方便了.Create Function dbo.Fn_findnum
    (@str varchar(100))
    returns varchar(100)
    as
    begin
    declare @start int
    declare @out_str varchar(100)
    select @start=patindex('%[0-9]%',@str)
    select @out_str=right(@str,len(@str)-@start+1)
    return(@out_str)
    end
    --测试
    select dbo.fn_findnum('dasd1234566')
    --结果
    /*
                                                                                                         
    ---------------------------------------------------------------------------------------------------- 
    1234566(所影响的行数为 1 行)
    */