請問在SQL200中如何才能將用right()函數截取的數字變為數值型?
如:RXXX-18P
現截得數據為18P現在想將18P轉為數字18,怎么實現呢

解决方案 »

  1.   

    我自定議了一個函數
    CREATE FUNCTION GetMaxHH (@chh char(13))
    RETURNS INT (5) AS  
    BEGIN 
    /*declare @zzhh numeric(5)
    -set @zzhh=0*/
                 declare @zzhh1 char(13)
                 select @zzhh1=@chh
    if patindex('%-%',@chh)>0
    begin 
         select @zzhh1=cast(substring(@zzhh1,patindex('%-%',@zzhh1)+1,4) as char(5))
                                    if right(@zzhh1,1)>'9' 
                                       begin
                                              set @zzhh1=rtrim(@zzhh1)
                                              set @zzhh1=left(@zzhh1,len(@zzhh1)-1)
                                       end
    end 
    return @zzhh1
    END但老提示出錯什么VARCHAR不能轉為INT之類的,我該怎么寫呢?
      

  2.   

    SQL200   -_-;数字的位置固定的话好说  cast(left(right('RXXX-18P',3),2) as int)
    或者 cast(substring('RXXX-18P',6,2) as int)
    不固定的话先用PATINDEX('%[0-9]%')找到第一个数字开始的位置 截取字符串,然后再找到PATINDEX('%[^0-9]%') 找到第一个非字符串。 
      

  3.   

    但老提示出錯什么VARCHAR不能轉為INT之類的,我該怎么寫呢?
    出错的是这句
    if right(@zzhh1,1)>'9' 
    应该是 > 9
      

  4.   

    搞定了謝謝SQL200      -_-;  
      

  5.   


    /*
    用于得出指定款號的最大出貨號(即'-'之后的數字)
    */
    CREATE FUNCTION GetMaxHH (@cZZHH char(13))
    RETURNS INT AS  
    BEGIN 
          DECLARE @cZZHH1 CHAR(13)
          SET @cZZHH1=RTRIM(@cZZHH)
           WHILE RIGHT(RTRIM(@cZZHH1),1)>'9'
               BEGIN
                    SET  @cZZHH1=SUBSTRING(@cZZHH1,1,LEN(RTRIM(@cZZHH1))-1)
               END
               DECLARE @cZZHH2 INT
               SELECT @cZZHH2=CAST(substring(@cZZHH1,patindex('%-%',@cZZHH1)+1,4) AS INT)
               return @cZZHH2
    END