select count(*) 
from dds#workflow.v_flw_common 
where (instr(substr(performer,0,instr(performer,'@')-1),'%1')>0  
or instr(substr(performer,0,instr(performer,'@')-1),'%1')=1)   
and process_id='%2'特别是这两句
(instr(substr(performer,0,instr(performer,'@')-1),'%1')>0  
or instr(substr(performer,0,instr(performer,'@')-1),'%1')=1) 
我搞了很久都不知到什么意思

解决方案 »

  1.   

    instr(
          substr(
                  performer,
                  0,
                  instr(
                       performer,
                       '@'
                  )-1
                 )
          ,'%1'
    ) > 0 
    只有instr,substr这两个函数
    从内向外看
      

  2.   

    instr(substr(performer,0,instr(performer,'@')-1),'%1')>0  查找字符串performer中@以前的字各个地方是否含有字符 '%1'
      

  3.   

    (instr(substr(performer,0,instr(performer,'@')-1),'%1')>0  
    or instr(substr(performer,0,instr(performer,'@')-1),'%1')=1) 
    -----------------------------------------------------------
    Instr(C1,C2,I,J):
    在一个字符串中搜索指定的字符,返回发现指定的字符的位置;
    C1    被搜索的字符串
    C2    希望搜索的字符串
    I     搜索的开始位置,默认为1
    J     出现的位置,默认为1
    -----------------------------------------------------------
    SUBSTR(string,start,count):
    取子字符串,从start开始,取count个
    -----------------------------------------------------------
    instr(performer,'@')-1
    查找performer中第一个出现@的位置;减一是因为substr是写的从0开始
    -----------------------------------------------------------
    substr(performer,0,instr(performer,'@')-1)
    截取@以前的字符
    -----------------------------------------------------------
    instr(substr(performer,0,instr(performer,'@')-1),'%1'
    查找截取的字符中是否含有字符'%1'
      

  4.   

    (instr(substr(performer,0,instr(performer,'@')-1),'%1')>0  
    这句诗:截取performer中0到‘@’前一个位置的内容,然后检查是否以‘1’结束。