其中一种解决方式。把你的规则写成一个表ABC
COL1  COL2
0     00
1     01
.     .
.     .
.     .
SELECT b.col2+substring(pro_no,2,len(substring)-1) FROM Products A INNER JION ABC B on upper(substring(pro_no,1,1))=b.col1

解决方案 »

  1.   

    定义个函数可以让SQL语句看的更简洁一些...
      

  2.   

    优化的話,可以像joyceanne(SQL桥)說的那樣弄個表,如果想看起來簡傑些的,寫個函數吧
    create function f_ascii(@po_no varchar(200))
    returns varchar(200)
    as
    begin
      declare @t table (po_no varchar(02))
     declare @s varchar(01)
     set @po_no=upper(@po_no)
      while len(@po_no)>0
      begin 
          set @s=left(@po_no,1)
          insert into @t select case when ascii(@s) between 65 and 90  then rtrim(ascii(@s)-54)
                                                  when ascii(@s) between 48 and 57 then '0'+@s  end
          
          set @po_no=stuff(@po_no,1,1,'') 
      end
     declare @str varchar(200)
     set @str=''
     select @str=@str+po_no from @t
     return @str
    endgo
    select po_no,dbo.f_ascii(po_no) from Products 
    where dbo.f_ascii(po_no) like '%0222%'
      

  3.   

    謝謝大家,看來沒有好辦法了,
    1、因為條件是 "Pro_No 的長度是變長的,不是定長的"
    我不可能用subString 的方法;
    2、使用函數並沒有使用 Replace 的速度快,速度差太遠了,後面的 Where 會重復的話,我隻要使用一個子查詢就可以解決了。